2012-11-14 46 views
5

在保留目錄和擴展名的同時,重命名Qt中給定文件路徑的基本文件名的最好/最標準的方法是什麼?在Qt中重命名基本文件名

有沒有一個標準的方法來做到這一點,或者我只是使用正則表達式?

比方說,我有:

/home/user/myfile.png 

,這將是更改爲:

/home/user/myfile-modified.png 

回答

6

使用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。否則,這應該工作。

+0

其實我不想移動文件本身,我只是想派生一個新的名字 - 例如,我的程序根據原始文件名加載原始文件,進行修改並保存一個新文件,但使用'修改'後綴。所以'QFile :: rename'在這裏不需要。 – sashoalm

+0

你誤會了。使用QFileInfo :: canonicalPath()保存原始位置,文件系統需要它來查找您嘗試編輯的文件位置。 QFile :: rename()無論如何都不能移動文件。 – Phlucious

+0

我會添加一行代碼來驗證重命名是否成功。如果修改後的文件名已經存在,QFile :: rename將失敗。 – Phlucious

1

沒有測試,但是這可能工作:

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();