#include <io.h>
#include <string.h>
#include <fstream>
/*
文件信息读取结构体 _finddata_t
struct _finddata_t
{
unsigned attrib; //文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。
//文件属性是用位表示的,主要有以下一些:
//_A_ARCH(存档)、 _A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。
time_t time_create; //文件创建的时间.time_tm秒数
time_t time_access; //文件最后一次被访问的时间
time_t time_write; //文件最后一次被修改的时间
_fsize_t size; //文件的大小(字节数表示)
char name[_MAX_FNAME]; //文件的文件名,_MAX_FNAME表示文件名的最大长度
};
long _findfirst( char *filespec, struct _finddata_t *fileinfo );
作用:获取存储文件信息的结构体
参数:filespec:文件路径
返回值: 成功 返回一个查找用的long型句柄,失败返回-1
int _findnext( long handle, struct _finddata_t *fileinfo );
作用:查找下一个文件
参数:
handle:即由_findfirst函数返回回来的句柄。
fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。
返回值: 成功返回0,失败返回1
int _findclose( long handle );
作用:关闭文件信息查找
返回值:成功返回0,失败返回-1。
参数:
handle :_findfirst函数返回回来的句柄。
*/
//获取文件夹下所有文件名
void getAllFiles(const string& path, vector<string>& files) {
//文件句柄
intptr_t hFile = 0;//intptr_t:x86编译时int,X64时long long
//文件信息
struct _finddata_t fileinfo; //文件信息读取结构
string p; //string一个赋值函数:assign(str):把str拷贝给p,append(str):在字符串结尾追加str
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)//"*"为通配符,匹配所有字符串 {
do
{
if ((fileinfo.attrib & _A_SUBDIR)) { //比较文件类型是否是文件夹
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name));//子文件夹路径
getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files);//查找子文件夹下的所有文件信息
}
}
else {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));//文件路径
}
}
while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
_findclose(hFile);
}
}