31

如何在 Qt 中删除非空文件夹。

4

2 回答 2

53

如果您使用的是 Qt 5,则有QDir::removeRecursively()

于 2013-06-13T08:24:45.010 回答
42

先递归删除目录的内容。这是一篇博客文章,其中包含执行此操作的示例代码。我已经包含了相关的代码片段。

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

编辑:以上答案适用于 Qt 4。如果您使用的是 Qt 5,则此功能通过QDir::removeRecursively()方法内置到 QDir 中。

于 2012-06-15T12:53:14.427 回答