Qt递归拷贝和删除目录
来源:互联网 发布:sql注入攻击方式 编辑:程序博客网 时间:2024/05/22 22:28
最近在翻看项目代码时,看到了这两个函数,想到这个功能十分常用,因此拿出来与大家分享,希望对大家有用。几点说明:
1、记得当初写代码那会,是参考了网上的帖子写的,做了一点小修改。因此代码源于网络。
2、同时感谢原作者,只可惜当时没能记下原文网址,实在抱歉!刚才搜了一下,也没搜着,大家若发现原文出处,请跟帖提醒。谢谢!
3、到目前为止,代码在项目中测试、运行正常,大家若使用时发现Bug,请跟帖指出,我待验证后会及时修改更新。谢谢!
bool copyDir(const QString &source, const QString &destination, bool override){ QDir directory(source); if (!directory.exists()) { return false; } QString srcPath = QDir::toNativeSeparators(source); if (!srcPath.endsWith(QDir::separator())) srcPath += QDir::separator(); QString dstPath = QDir::toNativeSeparators(destination); if (!dstPath.endsWith(QDir::separator())) dstPath += QDir::separator(); bool error = false; QStringList fileNames = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); for (QStringList::size_type i=0; i != fileNames.size(); ++i) { QString fileName = fileNames.at(i); QString srcFilePath = srcPath + fileName; QString dstFilePath = dstPath + fileName; QFileInfo fileInfo(srcFilePath); if (fileInfo.isFile() || fileInfo.isSymLink()) { if (override) { QFile::setPermissions(dstFilePath, QFile::WriteOwner); } QFile::copy(srcFilePath, dstFilePath); } else if (fileInfo.isDir()) { QDir dstDir(dstFilePath); dstDir.mkpath(dstFilePath); if (!copyDir(srcFilePath, dstFilePath, override)) { error = true; } } } return !error;}
QtCreator版本(在阅读 QtCreator 源码时,看到一个和以上功能一样的函数,想必像QtCreator这样的项目代码质量比我等程序员的代码质量更高。因此,特摘抄下来已做更新):
// taken from utils/fileutils.cpp. We can not use utils here since that depends app_version.h.static bool copyRecursively(const QString &srcFilePath, const QString &tgtFilePath){ QFileInfo srcFileInfo(srcFilePath); if (srcFileInfo.isDir()) { QDir targetDir(tgtFilePath); targetDir.cdUp(); if (!targetDir.mkdir(QFileInfo(tgtFilePath).fileName())) return false; QDir sourceDir(srcFilePath); QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System); foreach (const QString &fileName, fileNames) { const QString newSrcFilePath = srcFilePath + QLatin1Char('/') + fileName; const QString newTgtFilePath = tgtFilePath + QLatin1Char('/') + fileName; if (!copyRecursively(newSrcFilePath, newTgtFilePath)) return false; } } else { if (!QFile::copy(srcFilePath, tgtFilePath)) return false; } return true;}
bool deleteDir(const QString &dirName){ QDir directory(dirName); if (!directory.exists()) { return true; } QString srcPath = QDir::toNativeSeparators(dirName); if (!srcPath.endsWith(QDir::separator())) srcPath += QDir::separator(); QStringList fileNames = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); bool error = false; for (QStringList::size_type i=0; i != fileNames.size(); ++i) { QString filePath = srcPath + fileNames.at(i); QFileInfo fileInfo(filePath); if (fileInfo.isFile() || fileInfo.isSymLink()) { QFile::setPermissions(filePath, QFile::WriteOwner); if (!QFile::remove(filePath)) { qDebug() << "remove file" << filePath << " faild!"; error = true; } } else if (fileInfo.isDir()) { if (!deleteDir(filePath)) { error = true; } } } if (!directory.rmdir(QDir::toNativeSeparators(directory.path()))) { qDebug() << "remove dir" << directory.path() << " faild!"; error = true; } return !error;}
- Qt递归拷贝和删除目录
- Qt递归拷贝和删除目录
- Qt递归拷贝和删除目录
- 递归删除文件和目录
- 递归删除文件和目录
- 利用递归创建目录和删除目录
- 目录拷贝、删除和搬移的操作
- java递归删除目录和生成文件
- linux命令:递归删除某个文件或目录,拷贝时排除某个目录
- C# 文件操作--追加、拷贝、删除、移动文件、创建目录、递归、删除文件夹及文件....
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除
- JAVA 递归和非递归删除目录及文件
- java递归实现文件的删除和拷贝
- mFC下文件的递归删除和拷贝
- java递归实现文件的删除和拷贝
- PHP递归删除指定目录下的文件和目录
- PHP递归删除指定目录下的文件和目录
- 用递归实现目录删除和树形目录展示
- 【润乾V5】数据预警
- C语言基础之宏定义##连接符和#符
- 堆排序 C++实现
- 表单的写法
- java语句
- Qt递归拷贝和删除目录
- Sybase数据库中tempdb已满问题的分析方法
- iPhone系列手机邮箱设置方法
- 《深入浅出MFC》读书笔记
- 搭建tftp平台,使ARM板和虚拟机linux之间通讯
- QLabel 动态显示时间的方法(积累,包含QLabel显示图片的方法)
- IE6下li中span元素右浮动的BUG解决方案(其他的类似)
- 电脑族如何全面护眼(组图)
- C++ AMP: C++ AMP 平铺功能简介