我正在使用Qt从用户那里获取文件名:
QString fileName = QFileDialog::getOpenFileName(this,tr("Select an image file"),"d:\\",tr("Image files(*.tiff *.tif )"));
它可以工作,但是我需要文件名而没有它的扩展名,是否有可能在Qt? 当我尝试时:
QString f = QFileInfo(fileName).fileName();
f
就像“filename.tif”,但我希望它是“filename”。
答案 0 :(得分:82)
QFileInfo
有两个功能:
QString QFileInfo::completeBaseName () const
返回删除了最短扩展名的文件名(file.tar.gz
- > file.tar
)
QString QFileInfo::baseName () const
返回删除了最长扩展名的文件名(file.tar.gz
- > file
)
答案 1 :(得分:7)
要处理包含多个点的文件名,请查找最后一个,并将子字符串带到该字符串。
int lastPoint = fileName.lastIndexOf(".");
QString fileNameNoExt = fileName.left(lastPoint);
当然,这可以(而且应该)编写为辅助函数以供重用:
inline QString withoutExtension(const QString & fileName) {
return fileName.left(fileName.lastIndexOf("."));
}
答案 2 :(得分:2)
您可以使用QString::split
并使用.
作为拆分位置。
QStringList list1 = str.split(".");
这将返回QStringList
{"filename", "extenstion"}
。现在您可以获取没有扩展名的文件名。
答案 3 :(得分:2)
您可以split
fileName
使用“。”像这样的分隔符:
QString croped_fileName=fileName.split(".",QString::SkipEmptyParts).at(0);
或使用QString的section
函数获取“。”之前的第一部分。像这样:
QString croped_fileName=fileName.section(".",0,0);
答案 4 :(得分:-1)
要获取ul#menu li:focus{
background: #00C6F0;
}
的不带扩展名的绝对路径,可以使用:
QFileInfo fileInfo("/a/path/to/foo.tar.gz")
获得QDir(file_info.absolutePath()).filePath(file_info.baseName());
或
"/a/path/to/foo"
获得QDir(file_info.absolutePath()).filePath(file_info.completeBaseName());