你说得对,baseName()
方法仅会返回最后一个点之前的部分,如果文件名中包含多个点(如 file.name.txt
),它只会返回 file.name
。如果你想要处理这种情况,可以手动分割文件名。下面是一个示例代码,展示如何在有多个点的情况下获取不带后缀的文件名:
#include <QCoreApplication>
#include <QFileInfo>
#include <QString>
#include <QDebug>
QString getBaseName(const QString &fileName) {
// 获取文件后缀
QFileInfo fileInfo(fileName);
QString suffix = fileInfo.suffix();
// 如果没有后缀,则直接返回完整文件名
if (suffix.isEmpty()) {
return fileName;
}
// 从完整文件名中去掉后缀
return fileName.left(fileName.length() - suffix.length() - 1); // 减去后缀长度和点
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString filePath = "example/file.name.txt"; // 示例文件路径
QFileInfo fileInfo(filePath);
QString fullFileName = fileInfo.fileName(); // 获取完整文件名(包含后缀)
QString customBaseName = getBaseName(fullFileName); // 自定义函数获取不带后缀的文件名
QString suffix = fileInfo.suffix(); // 获取文件后缀
qDebug() << "完整文件名:" << fullFileName; // 输出: file.name.txt
qDebug() << "不带后缀的自定义文件名:" << customBaseName; // 输出: file.name
qDebug() << "文件后缀:" << suffix; // 输出: txt
return a.exec();
}
在这个示例中,我们创建了一个 getBaseName
函数,该函数接收一个带有扩展名的完整文件名,并通过计算去掉扩展名前面的字符来返回不带扩展名的部分。这样可以确保无论你的文件名中包含多少个点,都能正确获取到基础名称。
内容由零声教学AI助手提供,问题来源于学员提问