Qt之操作文件夹和文件
来源:互联网 发布:网络施工系统报价清单 编辑:程序博客网 时间:2024/06/06 08:57
Task:
cout << path<< endl; cout << "Usage: diriterator [path]" << endl; cout << " prints outa list of sdf files it can find below [path] or current directory."<< endl;
QCoreApplicationapp(argc, argv); QDir dir =QDir::current(); if(app.arguments().size() > 1) { dir = app.arguments()[1]; } if (!dir.exists()){ cerr << dir.path() << " does notexist!" << endl; usage(); return -1; } QDirIteratorqdi(dir.absolutePath(), QStringList() << "*.sdf", QDir::NoSymLinks | QDir::Files, QDirIterator::Subdirectories ); while (qdi.hasNext()){ listSdfFile(qdi.next()); }
QStringList() << "ipch", QDir::NoSymLinks |QDir::Dirs, QDirIterator::Subdirectories ); while (qdi.hasNext()){ listDir(qdi.next());
同样的方法也可以搜索“Debug"文件夹。
QDirIteratorqdi(dir.absolutePath(), QStringList() << "ipch" <<"Debug", QDir::NoSymLinks |QDir::Dirs, QDirIterator::Subdirectories ); while (qdi.hasNext()){ //listDir(qdi.next()); QDir targetDir(qdi.next()); targetDir.removeRecursively(); }
之前在学习《C++PrimerPlus》的时候,照着程序清单和练习题,用VS新建了许多个工程。由于VS在编译和运行工程的时候,会产生一些临时文件夹和临时文件,如“.sdf”“Debug”等,非常占空间。现需要将这些临时文件夹和临时删除,以便打包压缩所有的有效工程代码。
由于有上百个工程,逐个手工删除效率很低,而且每次用VS打开工程又会重新生成这些临时文件,非常烦恼。故想编一个小工具软件,能够自动迭代文件目录,删除指定名称和类型的文件和文件夹。
Solution:
1,QDir、QFileInfo和QDirIterator (参考《An Introduction of DesignPatterns in C++ with Qt》)
Qt提供了几种独立于平台的方法来遍历目录树。利用QDir和QFileInfo类,可以获得目录的内容列表以及关于每一个项的信息。
2,迭代器模式、递归函数(recursion)、向下迭代、文件过滤
注:参考Qt之操作文件和文件夹
一、使用QDirIterator遍历目录树,搜索指定文件
新建一个“main.cpp”文件,添加代码如下:
#include
QTextStream cout(stdout);
QTextStream cerr(stderr);
void listSdfFile(QString path) {
}
void usage() {
}
//start
int main (int argc, char* argv[]) {
}
//end
使用qmake去生成工程文件,并编译生成“diriterator.exe”。再使用cmd执行以下操作:
如上图所示,该操作显示了全部".sdf"文件。
注:cmd命令不支持空格,对文件路径有空格的,可以使用双引号包裹。
二、搜索文件夹
修改上述代码的对应部分如下:
QDirIterator qdi(dir.absolutePath(),
执行CMD命令:
同样的方法也可以搜索“Debug"文件夹。
三、添加删除文件和文件夹的代码,替换之前的”list“函数
1,删除文件
QFile::remove(qdi.next()); //listSdfFile(qdi.next());
2,删除文件夹
四、浅谈“迭代器模式”
QDirIterator是Qt提供的一个跨平台的文件目录迭代器,它将文件系统目录中的目录和文件(树的节点和子节点,树的枝和叶)统一看作项(entry)。在遍历的时候,无须区分目录和文件,超越了树结构的特殊性,用户不用关注目录嵌套,将树结构当成一般的线性结构,逐项迭代。这样,一次迭代即可访问整个目录树。
如果使用普通的for或foreach循环来遍历目录树,需要区分目录和文件,也需要用户关心目录嵌套,逐级进行遍历,然后设计递归函数进行子孙级层次的遍历。
0 0
- Qt之操作文件夹和文件
- python文件夹和文件操作
- 文件夹和文件操作注意事项
- <Android> 文件夹和文件操作
- Qt递归遍历文件夹和文件目录
- C#文件夹和文件的常见操作
- 总结ASP操作文件夹和文件(转)
- 文件夹和文件操作 增删改 --- 不断更新
- Python 文件夹和文件操作汇总
- Python Windows下操作文件夹和文件
- Java 代码删除文件夹及其子文件夹和文件操作
- python之文件的读写和文件目录以及文件夹的操作
- python之文件的读写和文件目录以及文件夹的操作
- Qt实现遍历文件夹和文件目录(递归)
- Qt 实现遍历文件夹和文件目录(递归)
- Qt实现遍历文件夹和文件目录(递归)
- Qt 实现遍历文件夹和文件目录(递归)
- Qt实现遍历文件夹和文件目录(递归) .
- Qt5(VS版)+QWT编译、安装和配置
- Qt之导出PDF、HTML和Word(一)
- MQTT协议及拓展
- Qt之导出PDF、HTML和Word(二)
- Qt之导出PDF、HTML和Word(三)
- Qt之操作文件夹和文件
- 《数据结构与算法》学习之入门篇
- 算法分析之基本公理
- overview_How do I develop a service
- Qt布局管理之QSplitter和QuadSplit…
- Qt之信号与槽应用小结
- WPS 文档编辑 总结与备忘
- C++设计模式之动态创建
- Qt之动态换图