C++批量读取文件信息(包括子文件夹)
2020-04-29 11:29
99 查看
这里使用的结构体是
_finddata_t
struct _finddata_t { unsigned attrib;//文件属性 time_t time_create; time_t time_access; time_t time_write; _fsize_t size; //文件大小,返回字节数 char name[_MAX_FNAME];//文件名 };
attrib:文件属性,用位表示,主要有以下一些:
_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些宏,可以直接使用。那么当一个文件有某个属性时,是通过位与的方式,来探测是否具有这个属性。
注意,每个文件夹都有
‘.’当前目录,
'..'上目录,此时可以忽略他们。
注意,使用
path=C:\\Program Files,仅仅读取的是这个文件夹的信息,要想读取文件夹内的文件,需要
path=C:\\Program Files\\*,重点是
*号。
#include <io.h> #include<string> #include<iostream> #include<vector> #include<algorithm> #include<map> long SumofB = 0; using namespace std; void getFiles(string path, map<string,long>& files) { long hFile = 0; struct _finddata_t fileinfo; string p; if ((hFile = _findfirst(p.assign(path).c_str(), &fileinfo)) != -1) { do { if ((fileinfo.attrib & _A_SUBDIR)) //检测是否为文件夹 { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) //检测是否为当前目录或上目录,是就忽略 { if (path.find('*')!=string::npos) { p.assign(path); p.erase(path.find('*'), path.find('*') + 1); getFiles(p.append(fileinfo.name).append("\\*"), files); //探索子文件夹 } else { getFiles(p.assign(path).append("\\*"), files); } } } else { p.assign(path); p.erase(path.find('*'), path.find('*') + 1); p.append(fileinfo.name); files.insert(pair<string,long>(p,fileinfo.size)); //存储路径+文件名,大小 SumofB += fileinfo.size; } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } int main(int argc,char*argv) { map<string,long> files; getFiles("C:\\Program Files", files); for_each(files.begin(), files.end(), [](pair<string,long>i) {cout << i.first << endl;}); cout << SumofB << endl; //计算所有文件大小 }
相关文章推荐
- python实现读取给定文件夹下文件目录与文件信息(包括子文件夹)
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- 对目录内所有文件(包括子文件夹文件)读取处理
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名(转)
- java读取文件夹下所有文件(包括子文件夹)的文件名
- PHP读取EXCEL文件(包括资源型的图片信息)
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- [置顶] ThinkPHP读取本地文件信息(包括中文路径)
- Java自动读取文件夹下的所有文件(包括子文件夹)
- 输入N个学生的信息(包括:学号,姓名,5科成绩,总分),统计所有学生的总分,存入二进制文件stu_sc.dat中。然后读取该文件,查找总分最高的学生,并输出该生的所有信息。
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名(转载)
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- kettle读取文件目录下的数据结构一致的所有数据文件信息和内容
- c#遍历一个文件夹下的所有文件包括子文件夹
- 深入分析FFmpeg之一-打开媒体文件并读取文件头信息
- python使用os.walk和os.path.join来遍历文件夹的文件(包括子文件夹下的文件)