2012-06-15 7 views

cevap

39

yinelemeli ilk dizinin içeriğini silin. Here is a blog post with sample code for doing just that. İlgili kod snippet'ini ekledim.

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; 
} 

Düzenleme: Yukarıdaki cevabı Qt 4. Qt 5 kullanıyorsanız içindi, o zaman bu işlevselliği QDir::removeRecursively() yöntemle QDir yerleşiktir.

+1

göreli yollar için çalışmaz gibi görünüyor. removeDir ("docs") eğer ilkinde "docs/docs" varsa bunu kontrol edecektir. Aynı problem dir.rmdir satırında. Ben haklı mıyım – cybevnm

+0

@cybevnm: Evet, haklısınız. Snippet'i, aşırı yüklü 'exists()' yöntemini parametreler olmadan kullanacak şekilde değiştirdim. http://doc.qt.io/qt-4.8/qdir.html#exists-2 –

+1

"Sonuç = dir.rmdir (dizinadı)" satırı inanmak aynı kusuru vardır. Düzeltmek için QDir(). Rmdir (dirName) kullanıyorum. – cybevnm