在Qt中删除文件名的扩展名

时间:2013-03-06 10:34:56

标签: c++ qt

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

5 个答案:

答案 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());