21

我正在使用 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"

4

5 回答 5

98

QFileInfo为此有两个功能:

QString QFileInfo::completeBaseName () const

返回删除了最短扩展名的文件名 ( file.tar.gz-> file.tar)

QString QFileInfo::baseName () const

返回删除了最长扩展名的文件名 ( file.tar.gz-> file)

于 2013-03-06T10:49:03.377 回答
9

要处理包含多个点的文件名,请查找最后一个并获取子字符串直到那个。

int lastPoint = fileName.lastIndexOf(".");
QString fileNameNoExt = fileName.left(lastPoint);

当然,这可以(并且应该)写成一个辅助函数以便重用:

inline QString withoutExtension(const QString & fileName) {
    return fileName.left(fileName.lastIndexOf("."));
}
于 2013-03-06T10:43:52.227 回答
2

你可以split fileName用“。” 作为这样的分隔符:

QString croped_fileName=fileName.split(".",QString::SkipEmptyParts).at(0);

或者使用sectionQString 的函数来取“.”之前的第一部分。像这样:

QString croped_fileName=fileName.section(".",0,0);
于 2013-03-06T10:39:42.730 回答
1

您可以使用QString::split并使用它.作为拆分它的地方。

QStringList list1 = str.split(".");

这将返回一个QStringListwith {"filename", "extenstion"}。现在您可以在没有扩展名的情况下获取文件名。

于 2013-03-06T10:37:58.490 回答
1

要获得没有扩展名的绝对路径,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());

要得到"/a/path/to/foo.tar"

于 2018-11-28T17:27:30.663 回答