使用Qt如何删除一个文件夹及其所有内容?

16
如何使用Qt删除文件夹及其所有内容?
我尝试使用:
QFile::remove();

但是似乎它只能一次删除一个文件。


1
这是一个重复的问题,这里有原始链接:https://dev59.com/EGgu5IYBdhLWcg3w0qRK - Rahul Manne
1
@InnocentBystander 比你快了25秒 :P - Rahul Manne
可能是在Qt中删除非空文件夹的重复问题。 - sigy
1个回答

48

对于Qt5及以上版本,可以使用QDir::removeRecursively函数:

QDir dir("C:\\Path\\To\\Folder\\Here");
dir.removeRecursively();

对于Qt4或更低版本,您可以使用递归函数来删除每个文件:

bool removeDir(const QString & dirName)
{
    bool result = true;
    QDir dir(dirName);

    if (dir.exists(dirName)) {
        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 = dir.rmdir(dirName);
    }
    return result;
}

就像这里所述。


10
我已经删除了一个包含大约700个源代码文件的整个目录,但幸运的是我在一天之前已经提交到svn。 QDir :: NoDotAndDotDot 非常重要,否则它会跳到上一级并删除那里的所有内容。 - Phiber

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