在 Qt6 中,QFileInfo::baseName()
方法确实只返回文件名中第一个点(.
)之前的部分。如果你希望获得更复杂的逻辑,比如要获取不带所有后缀的基础名称,可以自定义实现。以下是一个示例代码,用于处理文件名,确保提取正确的基本名称:
#include <QCoreApplication>
#include <QFileInfo>
#include <QString>
#include <QStringList>
#include <QDebug>
QString getCustomBaseName(const QString &fileName) {
QFileInfo fileInfo(fileName);
// 获取完整的文件名和后缀
QString fullFileName = fileInfo.fileName();
QStringList parts = fullFileName.split('.');
// 如果没有扩展名,则直接返回完整文件名
if (parts.size() <= 1) {
return fullFileName;
}
// 去掉最后一个部分作为后缀,返回其他部分组合起来的字符串
parts.removeLast(); // 去掉最后一个后缀部分
return parts.join('.'); // 使用 '.' 连接剩下的部分以形成基础名称
}
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 = getCustomBaseName(fullFileName); // 自定义函数获取不带后缀的文件名
qDebug() << "完整文件名:" << fullFileName; // 输出: file.name.txt
qDebug() << "自定义不带后缀的文件名:" << customBaseName; // 输出: file.name
return a.exec();
}
解释:
- 我们使用
split('.')
方法将文件名按点拆分成多个部分。 - 检查如果数组大小小于等于1,则说明没有扩展名,直接返回整个文件名。
- 如果存在多个点,我们移除最后一个元素(即扩展名),然后通过
join('.')
将剩余部分重新组合为基础名称。
这种方法能有效处理有多个点的情况,以获取你所需的不带扩展名前面内容。
内容由零声教学AI助手提供,问题来源于学员提问