寫的軟件需要進行文件夾的復制,開始不怎么懂就找了個拷貝文件夾的代碼測試了一下,運行程序選擇了源目錄和目標目錄相同進行拷貝,結果悲劇了。因為是遞歸拷貝,導致文件夾被嵌套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系統來刪除都沒搞定,囧)
使用這個一定要小心,別寫錯刪除了重要的東西,哈哈!
