在Qt中删除一个非空文件夹

33

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

2个回答

54

43

首先要递归删除目录的内容。 这里有一篇博客文章,提供了执行此操作的示例代码。 我已经包括了相关的代码片段。

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中,可以使用QDir::removeRecursively()方法。


1
似乎用相对路径不起作用。removeDir("docs")会在第一个if中检查是否存在"docs/docs"。dir.rmdir行也存在同样的问题。我是对的吗? - cybevnm
@cybevnm:是的,你说得对。我将代码片段更改为使用没有参数的重载exists()方法。http://doc.qt.io/qt-4.8/qdir.html#exists-2 - Judge Maygarden
1
"result = dir.rmdir(dirName)" 这一行代码也有同样的缺陷。我已经使用 QDir().rmdir(dirName) 来修复它。 - cybevnm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接