5
在保留目錄和擴展名的同時,重命名Qt中給定文件路徑的基本文件名的最好/最標準的方法是什麼?在Qt中重命名基本文件名
有沒有一個標準的方法來做到這一點,或者我只是使用正則表達式?
比方說,我有:
/home/user/myfile.png
,這將是更改爲:
/home/user/myfile-modified.png
在保留目錄和擴展名的同時,重命名Qt中給定文件路徑的基本文件名的最好/最標準的方法是什麼?在Qt中重命名基本文件名
有沒有一個標準的方法來做到這一點,或者我只是使用正則表達式?
比方說,我有:
/home/user/myfile.png
,這將是更改爲:
/home/user/myfile-modified.png
使用QFileInfo解析出路徑的各個方面。
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
。否則,這應該工作。
沒有測試,但是這可能工作:
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();
其實我不想移動文件本身,我只是想派生一個新的名字 - 例如,我的程序根據原始文件名加載原始文件,進行修改並保存一個新文件,但使用'修改'後綴。所以'QFile :: rename'在這裏不需要。 – sashoalm
你誤會了。使用QFileInfo :: canonicalPath()保存原始位置,文件系統需要它來查找您嘗試編輯的文件位置。 QFile :: rename()無論如何都不能移動文件。 – Phlucious
我會添加一行代碼來驗證重命名是否成功。如果修改後的文件名已經存在,QFile :: rename將失敗。 – Phlucious