2012-06-15 34 views

Trả lời

39

Đệ quy xóa nội dung của thư mục trước. Here is a blog post with sample code for doing just that. Tôi đã bao gồm đoạn mã có liên quan.

bool removeDir(const QString & dirName) 
{ 
    bool result = true; 
    QDir dir(dirName); 

    if (dir.exists()) { 
     Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) { 
      if (info.isDir()) { 
       result = removeDir(info.absoluteFilePath()); 
      } 
      else { 
       result = QFile::remove(info.absoluteFilePath()); 
      } 

      if (!result) { 
       return result; 
      } 
     } 
     result = QDir().rmdir(dirName); 
    } 
    return result; 
} 

Sửa: Câu trả lời ở trên là dành cho Qt 4. Nếu bạn đang sử dụng Qt 5, sau đó chức năng này được xây dựng vào QDir với phương pháp QDir::removeRecursively().

+1

Dường như sẽ không hoạt động đối với đường dẫn tương đối. removeDir ("tài liệu") sẽ kiểm tra xem "tài liệu/tài liệu" có tồn tại trong tài liệu đầu tiên hay không. Cùng một vấn đề là trong dòng dir.rmdir. Tôi có đúng không? – cybevnm

+0

@cybevnm: Vâng, bạn nói đúng. Tôi đã thay đổi đoạn mã để sử dụng phương thức 'exist()' bị quá tải mà không có tham số. http://doc.qt.io/qt-4.8/qdir.html#exists-2 –

+1

Dòng "result = dir.rmdir (dirName)" có cùng lỗi mà tôi tin. Tôi đã sử dụng QDir(). Rmdir (dirName) để sửa chữa nó. – cybevnm

Các vấn đề liên quan