2012-06-15 12 views

Odpowiedz

39

Najpierw rekursywnie usuń zawartość katalogu. Here is a blog post with sample code for doing just that. Dołączyłem odpowiedni fragment kodu.

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

Edit: Powyższa odpowiedź była dla Qt 4. Jeśli używasz Qt 5, wtedy ta funkcja jest wbudowana w QDir metodą QDir::removeRecursively().

+1

Wygląda na to, że nie działa dla ścieżek względnych. removeDir ("docs") sprawdzi, czy "dokumenty/dokumenty" istnieje w pierwszym przypadku. Ten sam problem występuje w linii dir.rmdir. Czy mam rację ? – cybevnm

+0

@cybevnm: Tak, masz rację. Zmieniono fragment kodu, aby użyć przeciążonej metody "exist()" bez parametrów. http://doc.qt.io/qt-4.8/qdir.html#exists-2 –

+1

Linia "result = dir.rmdir (dirName)" ma tę samą wadę, w którą wierzę. Użyłem QDir(). Rmdir (dirName), aby to naprawić. – cybevnm

Powiązane problemy