寫的軟件需要進行文件夾的復制,開始不怎么懂就找了個拷貝文件夾的代碼測試了一下,運行程序選擇了源目錄和目標目錄相同進行拷貝,結果悲劇了。因為是遞歸拷貝,導致文件夾被嵌套N層,軟件死機,強制結束后,產生的文件夾有N多層,右鍵刪除說文件名太長無法刪除。網上找了很多方法都無法清理掉這個嵌套的文件夾,折磨了N久,終於想通,既然是Qt生成的嵌套文件夾,為何不用Qt再寫一個刪除的程序呢?於是動手查看help,找API函數說明,碼代碼。
//刪除文件夾 bool MainWindow::DelDir(const QString &path) { if (path.isEmpty()){ return false; } QDir dir(path); if(!dir.exists()){ return true; } dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //設置過濾 QFileInfoList fileList = dir.entryInfoList(); // 獲取所有的文件信息 foreach (QFileInfo file, fileList){ //遍歷文件信息 if (file.isFile()){ // 是文件,刪除 file.dir().remove(file.fileName()); }else{ // 遞歸刪除 DelDir(file.absoluteFilePath()); } } return dir.rmpath(dir.absolutePath()); // 刪除文件夾 }
這樣,新建一個QFileDialog傳入文件路徑就可以將文件夾徹底刪除,不用windows的右鍵刪除了。(在這之前還重啟系統去用U盤啟動pe系統來刪除都沒搞定,囧)
使用這個一定要小心,別寫錯刪除了重要的東西,哈哈!