C++遍历文件夹下所有文件
来源:互联网 发布:青年网络公开课 优酷 编辑:程序博客网 时间:2024/06/14 13:32
早上吃饭时同学问我怎么读若干个同样格式的文件,我说把文件名都改成有规律的比如1.txt,2.txt,3.txt……然后修改string,他又问我怎么修改,想起解释起来也比较麻烦,而且这方法其实不是很好(因为要手动修改文件名)所以复习下遍历文件夹的知识。
其实我还是比较常用MFC的所以直接用WIN32_FIND_DATA结构体,对应宽字节的为WIN32_FIND_DATAW。才发现控制台下可以用MFC类库于是直接写控制台程序了,在VS2012下勾选添加公共头文件以用于MFC即可。
#include <string>#include <vector>#include <cstring>#include <algorithm>//中间为自动生成代码//main函数内//遍历文件夹WIN32_FIND_DATAA data;string strPathFileFolder("F:\\测试"); //文件夹路径string curr = strPathFileFolder + "\\*.*";vector<string> vFileName; //文件夹下文件名//找到文件夹起始句柄HANDLE hError = ::FindFirstFileA(curr.c_str(), &data);if (hError == INVALID_HANDLE_VALUE){cout << "找不到该目录" << endl;return 1;}//不断寻找下一个文件名直到文件末尾,并将路径存入vFileNamewhile (::FindNextFileA(hError, &data)){//过滤.和..if (strcmp(data.cFileName, ".") == 0|| strcmp(data.cFileName, "..") == 0){continue;}vFileName.push_back(string(data.cFileName));}//输出文件名for_each(vFileName.begin(), vFileName.end(),[](string strPath){ cout << strPath << endl; });
可以发现文件夹名也遍历到了
如果要进一步遍历的话只需要判断是否有后缀了。假如要筛选出.rar文件只需要添加后缀判断代码。
但是可以发现这里很多文件名中已经包含了'.'所以如果直接find'.'会出问题
//把原来的vFileName.push_back("")改成以下代码//筛选.rar文件string str(data.cFileName);auto iter = find(str.begin(), str.end(), '.');if (iter != str.end()){while (true){//寻找下一个.的位置iter2auto iter2 = iter + 1;iter2 = find(iter2, str.end(), '.');//iter2到达str.end()时iter即最后一个.的位置if (iter2 == str.end()) {if (string(iter, str.end()) == ".rar"){vFileName.push_back(str);}break;}iter = iter2;}}
到这一步遍历文件夹的操作就回顾完毕了,查找文件夹名只需要判断if (iter == str.end())即可。
不过发现其实不用MFC类库也可以遍历文件夹,利用<io.h>下的_finddata_t结构体,方法差不多。
#include <io.h>#include <iostream>#include <string>#include <cstring>#include <vector>#include <algorithm>using namespace std;int main(){_finddata_t data;string strFileFolder = "F:\\测试";string curr = strFileFolder + "\\*.*";vector<string> vFileName;//查找文件夹第一个文件句柄int handle = _findfirst(curr.c_str(), &data);if (handle == -1){cout << "找不到该目录" << endl;return 1;}while (!_findnext(handle, &data)){//过滤..if (strcmp(data.name, "..")){vFileName.push_back(string(data.name));}}//输出该文件夹下所有文件名for_each(vFileName.begin(), vFileName.end(),[](string& str){ cout << str << endl; });return 0;}
0 0
- 遍历文件夹下所有文件
- 遍历文件夹下所有文件
- 遍历文件夹下所有文件
- 遍历文件夹下所有文件
- C#.Net遍历远程文件夹下的所有文件
- C#.Net遍历本地文件夹下的所有文件
- 用C遍历文件夹下的所有文件
- 用C遍历文件夹下的所有文件
- 遍历文件夹下的所有文件(Python&C++)
- C/C++遍历Windows文件夹下的所有文件
- 遍历文件夹下所有文件和文件夹
- [C/C++] WIN_遍历文件夹下所有文件和文件夹VC
- c遍历所有文件夹中的文件
- linux C语言遍历文件夹所有文件
- Python-遍历目标文件夹下所有文件
- VC下遍历文件夹中的所有文件
- 遍历目标文件夹下所有文件
- oracle遍历文件夹下所有文件
- webView console Uncaught TypeError
- 刘宇凡:解读微信朋友圈策略调整的重要目的
- C# 把类实例保存到文件里(类的序列化和反序列化)
- 黑马程序员-类加载器
- 说太多不如沉默 想太多我会难过
- C++遍历文件夹下所有文件
- 柯美打印机资料整理
- 黑马程序员_函数,值传递和指针传递区别,转义字符,格式字符
- Web 开发人员必备的12款 Chrome 扩展程序
- 【原创】JAVA开发的小音乐播放器
- 用PersonalRank实现基于图的推荐算法
- 黑马程序员-装饰类
- xend-xl-libvirt
- 如果你等待,唯一发生的只有你变老。