2015-07-21 49 views
0

我有一個帶有備份副本的文本文件:備份副本具有相同的名稱,只有「2」作爲擴展名的最後一個字符(例如:原始文件:Myfile.txt - Backup:Myfile.txt2)。 有時我需要用備份來替換原來的那個;我做了以下幾點:如何在Qt中管理文件(替換,刪除...)?

QFile BackupFile("Myfile.txt2");   // backup copy 
QString nameFile = BackupFile.fileName();// name of backup copy of file 
nameFile.chop(1);      // remove the last letter of file name, so nameFile now is the same of Original file 
QFile originalFile(nameFile);    // Original copy 
originalFile.remove();      // delete the original file 
BackupFile.rename(nameFile);   // rename the backup file as original 
BackupFile.close();      // close the file 

這個工程,但它似乎太複雜。我想要更容易一些。

你有什麼建議嗎?

+0

爲什麼您必須首先重命名備份? – cen

+1

您可能希望打開這兩個文件並將其中的內容複製到另一個文件中,但該方法並不比您使用的文件更好,尤其是在大文件的情況下。 – vahancho

回答

2

我覺得這段代碼可以是簡單的方法。然而,你應該爲錯誤的情況下添加代碼,如「檢查備份文件是否存在。」等。

auto ReplaceWithBackup = [](QString& backupName) -> bool 
{ 
    QString originName = backupName; 
    originName.chop(1); 

    if (QFile::exists(originName)) 
    { 
     QFile::remove(originName); 
    } 

    return QFile::rename(backupName, originName); 
}; 

if (ReplaceWithBackup("Myfile.txt2") == false) 
{ 
    // error 
} 
+0

不太清楚;你能澄清第一行嗎? – LittleSaints

+0

你的意思是'QString originalName = backupName;'? – hyun

+0

我的意思是:自動ReplaceWithBackup = [](QString&backupName) - > bool 似乎與我的編譯器不兼容... – LittleSaints

0

如果這些文件在同一目錄下,你可以使用一個QDir ::重命名。否則,需要讀取一個文件並在另一個文件中寫入。這是我的第一個案例。

// Generate some test data 
{ 
    QFile bf("Myfile.txt2"); 
    bf.open(QIODevice::WriteOnly); 
    bf.write("Backup data"); 
    QFile("Myfile.txt").open(QIODevice::WriteOnly); 
} 

//Assume you know which back-up file to restore 
QString backupFn("Myfile.txt2"); 

//Actual code 
QString origFn = backupFn.mid(0, backupFn.size()-1); //"guess" the original file name. 
QFile::remove(origFn); //Use static version to delete file by name (No QFile instance required) 
QDir().rename(backupFn,origFn); 

但是,每一行都需要許多檢查和驗證,例如,是提供的備份文件名稱有效的備份名稱,刪除/重命名成功等等等等。

相關問題