博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt删除目录及目录下所有文件
阅读量:6652 次
发布时间:2019-06-25

本文共 2497 字,大约阅读时间需要 8 分钟。

hot3.png

==========2017年10月12日更新==========

最近在做安装包,看到qt-installer-framework源码里有相关源代码,以后删除文件夹就可以直接照搬这个了

void removeFiles(const QString &path, bool ignoreErrors){    const QFileInfoList entries = QDir(path).entryInfoList(QDir::AllEntries | QDir::Hidden);    foreach (const QFileInfo &fi, entries) {        if (fi.isSymLink() || fi.isFile()) {            QFile f(fi.filePath());            if (!f.remove()) {                const QString errorMessage = QCoreApplication::translate("QInstaller",                    "Cannot remove file \"%1\": %2").arg(                            QDir::toNativeSeparators(f.fileName()), f.errorString());                qWarning()<< errorMessage;            }        }    }}static QString errnoToQString(int error){#if defined(Q_OS_WIN) && !defined(Q_CC_MINGW)    char msg[128];    if (strerror_s(msg, sizeof msg, error) != 0)        return QString::fromLocal8Bit(msg);    return QString();#else    return QString::fromLocal8Bit(strerror(error));#endif}void removeDirectory(const QString &path, bool ignoreErrors){    if (path.isEmpty()) // QDir("") points to the working directory! We never want to remove that one.        return;    QStringList dirs;    QDirIterator it(path, QDir::NoDotAndDotDot | QDir::Dirs | QDir::NoSymLinks | QDir::Hidden,        QDirIterator::Subdirectories);    while (it.hasNext()) {        dirs.prepend(it.next());        removeFiles(dirs.at(0), ignoreErrors);    }    QDir d;    dirs.append(path);    removeFiles(path, ignoreErrors);    foreach (const QString &dir, dirs) {        errno = 0;        if (d.exists(path) && !d.rmdir(dir)) {            const QString errorMessage = QCoreApplication::translate("QInstaller",                "Cannot remove directory \"%1\": %2").arg(QDir::toNativeSeparators(dir),                                                          errnoToQString(errno));            if (!ignoreErrors)                qWarning()<< errorMessage;        }    }}

 

=====================================================

查过资料好像Qt和windows都没有这样一个接口能直接删除一个不为空的目录。

自己实现了一个,采用递归,估计目录太深堆栈就爆掉了吧

void deleteDir(const QString &d){    QDir dir(d);    foreach (QFileInfo inf, dir.entryInfoList(QDir::Dirs|QDir::Files)) {        if(inf.isFile())            dir.remove(inf.absoluteFilePath());        else if(inf.isDir() &&                inf.fileName() != "." &&                inf.fileName() != "..")            deleteDir(inf.absolutePath()+"/"+inf.fileName());    }    dir.rmdir(dir.absolutePath());}

 

转载于:https://my.oschina.net/u/1466652/blog/806949

你可能感兴趣的文章
网站10大常见安全漏洞及解决方案
查看>>
消息中间件系列四、认识AMQP和RabbiyMq的简单使用
查看>>
站在巨人的肩膀上
查看>>
AndroidStudio 快速集成 秒级编译工具Freeline
查看>>
Django中ajax技术和form表单两种方式向后端提交文件
查看>>
函数计算自动化运维实战3 -- 事件触发自动创建快照
查看>>
对于已经添加引用,还找不到类型或名字空间的错误及svn客户端清除用户帐号密码...
查看>>
Spring Tools 4.2.1 发布,针对 Spring 应用的开发环境
查看>>
DBeaver 社区版 6.0 正式发布,可视化数据库管理工具
查看>>
<进击的虫师>舆情监测之获取数据
查看>>
快速开始 Hello World 和 Python 之禅
查看>>
Linux磁盘相关命令
查看>>
Vue常用经典开源项目汇总参考-海量
查看>>
精通SpringBoot——第十二篇:分页查询功能的实现
查看>>
基于python的图片修复程序-可用于水印去除
查看>>
swap交换分区
查看>>
最简单靠谱的vsftpd安装指南(Ubuntu16.04)
查看>>
异数OS TCP协议栈测试(一)--数据传输篇
查看>>
html基础加强2
查看>>
Android设计模式系列-单例模式
查看>>