2012-06-15 13 views

Respuesta

39

Primero elimine el contenido del directorio de forma recursiva. Here is a blog post with sample code for doing just that. He incluido el fragmento de código relevante.

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

Editar: La respuesta anterior era para Qt 4. Si está utilizando Qt 5, entonces esta funcionalidad está integrada en QDir con el método QDir::removeRecursively().

+1

Parece que no funcionará para rutas relativas. removeDir ("documentos") comprobará si "docs/docs" existe en el primero si. El mismo problema está en la línea dir.rmdir. ¿Estoy en lo cierto? – cybevnm

+0

@cybevnm: Sí, tienes razón. Cambié el fragmento para usar el método 'exists()' sobrecargado sin parámetros. http://doc.qt.io/qt-4.8/qdir.html#exists-2 –

+1

La línea "result = dir.rmdir (dirName)" tiene el mismo defecto, creo. He usado QDir(). Rmdir (dirName) para arreglarlo. – cybevnm

Cuestiones relacionadas