2012-06-15 39 views

答えて

39

最初にディレクトリの内容を再帰的に削除します。 Here is a blog post with sample code for doing just that.関連するコードスニペットを記載しました。

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

編集:あなたは、この機能がQDir::removeRecursively()方法でQDirに組み込まれているのQt 5を使用している場合は、上記の答えはQtの4のためでした。

+1

類似パスは相対パスでは機能しません。 removeDir( "docs")は、最初のifに "docs/docs"が存在するかどうかをチェックします。同じ問題はdir.rmdir行にあります。私は正しい? – cybevnm

+0

@cybevnm:はい、そうです。パラメータなしでオーバーロードされた 'exists()'メソッドを使用するようにスニペットを変更しました。 http://doc.qt.io/qt-4.8/qdir.html#exists-2 –

+1

"result = dir.rmdir(dirName)"の行には私と同じ欠陥があります。 QDir()。rmdir(dirName)を使って修正しました。 – cybevnm

関連する問題