【问题标题】:Removing a non empty folder in Qt删除 Qt 中的非空文件夹
【发布时间】:2012-06-18 12:59:51
【问题描述】:

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

【问题讨论】:

    标签: qt qt4


    【解决方案1】:

    先递归删除目录的内容。 Here is a blog post with sample code for doing just that.我已经包含了相关代码sn-p。

    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 中。

    【讨论】:

    • 似乎不适用于相对路径。 removeDir("docs") 将检查“docs/docs”是否存在于第一个 if 中。同样的问题在 dir.rmdir 行。我说的对吗?
    • @cybevnm:是的,你是对的。我将 sn-p 更改为使用不带参数的重载 exists() 方法。 doc.qt.io/qt-4.8/qdir.html#exists-2
    • 我相信“result = dir.rmdir(dirName)”行有同样的缺陷。我已经使用 QDir().rmdir(dirName) 来修复它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2017-02-19
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      相关资源
      最近更新 更多