Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Qt中派生新的基文件名?_C++_Qt_Filepath - Fatal编程技术网

C++ 如何在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()

在保留目录和扩展名的同时,在Qt中重命名给定文件路径的基本文件名的最佳/最标准的方法是什么

有没有一种标准的方法可以做到这一点,或者我只是使用正则表达式

假设我有:

/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点还没到,我今天学到了一些新东西!