C++ 如何在Qt中派生新的基文件名?
在保留目录和扩展名的同时,在Qt中重命名给定文件路径的基本文件名的最佳/最标准的方法是什么 有没有一种标准的方法可以做到这一点,或者我只是使用正则表达式 假设我有:C++ 如何在Qt中派生新的基文件名?,c++,qt,filepath,C++,Qt,Filepath,在保留目录和扩展名的同时,在Qt中重命名给定文件路径的基本文件名的最佳/最标准的方法是什么 有没有一种标准的方法可以做到这一点,或者我只是使用正则表达式 假设我有: /home/user/myfile.png 将改为: /home/user/myfile-modified.png 未测试,但这可能有效: const char* filePath = "/home/user/myfile.png"; QFileInfo file(filePath); QDir dir = file.dir()
/home/user/myfile.png
将改为:
/home/user/myfile-modified.png
未测试,但这可能有效:
const char* filePath = "/home/user/myfile.png";
QFileInfo file(filePath);
QDir dir = file.dir();
QString baseName = file.baseName();
QString baseNameModified = ...; // insert here your logic for modifying filename
QFileInfo fileModified(dir, baseNameModified);
QString filePathModified = fileModified.filePath();
用于解析路径的各个方面
QFileInfo original("/home/user/myfile.png");
QString newPath = original.canonicalPath() + QDir::separator() + original.baseName() + "-modified";
if (!original.completeSuffix().isEmpty())
newPath += "." + original.completeSuffix();
警告:如果文件名以“.”结尾,但没有扩展名,则会删除“.”。换句话说,
/home/user/myfile.
将被重命名为/home/user/myfile modified
。否则,这应该可以工作。实际上我不想移动文件本身,我只想派生一个新名称-例如,我的程序加载原始文件,进行修改,并根据原始文件名保存一个新文件,但附加“-modified”。所以这里不需要QFile::rename
。您误解了。原始位置是使用QFileInfo::canonicalPath()保留的,并且是文件系统查找您试图编辑的文件位置所必需的。QFile::rename()无论如何都无法移动文件。我将添加一行代码来验证重命名是否成功。QFile::如果修改后的文件名已经存在,重命名将失败。@Phlucious这不是真的。这里QFile::rename()
最终调用rename()
,它实际上能够重命名和移动文件。例如QFile::rename(“myFile”、“myFile”)
会将myFile移动到父目录。@scai有趣。我刚刚做了一个快速测试,验证了你的正确性。早上9点还没到,我今天学到了一些新东西!