void GetFilesFromFolder(const string &path, vector<string> &files)
{
//文件句柄
intptr_t hFile = 0; // win10
//文件信息
struct _finddata_t fileinfo;
string p;
LogDebugInfo(LOGTYPE_INFO, CA2CT(path.c_str()));
if ((hFile = _findfirst(p.assign(path).append("*").c_str(), &fileinfo)) != -1)
// "\\*"是指读取文件夹下的所有类型的文件,若想读取特定类型的文件,以png为例,则用“\\*.png”
{
do
{
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
GetFilesFromFolder(p.assign(path).append(fileinfo.name), files);
}
else
{
LogDebugInfo(LOGTYPE_INFO, CA2CT(fileinfo.name));
files.push_back(path + fileinfo.name);
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
其中需要注意:
1.遍历文件夹的时候文件夹里面有.和..两个文件夹。其实每个文件夹里面都有.和..文件夹。遍历的时候需要过滤掉这两个文件夹。