用法
vector<CString> v;
//获取所有文件
GetFilePath(v,L"D:\\test\\");
//文件路径储存在容器里面,遍历容器
for(int i=0;i<v.size();i++){
//文件操作
}
//获取所有txt文件
vector<CString> vv;
GetTxtFilePath(vv,L"D:\\test\\");
//文件路径储存在容器里面,遍历容器
for(int i=0;i<vv.size();i++){
//文件操作
}
实现
遍历所有文件
void GetFilePath(vector<CString>& vFilePathList, CString strDir)
{
CFileFind finder;
BOOL isNotEmpty = finder.FindFile(strDir + _T("*"));//总文件夹,开始遍历
while (isNotEmpty)
{
isNotEmpty = finder.FindNextFile();//查找文件
CString filename = finder.GetFilePath();//获取文件的路径,可能是文件夹,可能是文件
if (!(finder.IsDirectory()))
{
//如果是文件则加入文件列表
vFilePathList.push_back(filename);//将一个文件路径加入容器
}
else
{
//递归遍历用户文件夹,跳过非用户文件夹
if (!(finder.IsDots() || finder.IsHidden() || finder.IsSystem() || finder.IsTemporary() || finder.IsReadOnly()))
{
GetFilePath(vFilePathList, filename + _T("/"));
}
}
}
}
遍历所有txt文件
void GetTxtFilePath(vector<CString>& vFilePathList, CString strDir)
{
CFileFind finder;
BOOL isNotEmpty = finder.FindFile(strDir + _T("*"));//总文件夹,开始遍历
while (isNotEmpty)
{
isNotEmpty = finder.FindNextFile();//查找文件
CString filename = finder.GetFilePath();//获取文件的路径,可能是文件夹,可能是文件
if (!(finder.IsDirectory()))
{
//如果是文件则加入文件列表
if (!filename.Right(4).Compare(L".txt")){
vFilePathList.push_back(filename);//将一个文件路径加入容器
}
}
else
{
//递归遍历用户文件夹,跳过非用户文件夹
if (!(finder.IsDots() || finder.IsHidden() || finder.IsSystem() || finder.IsTemporary() || finder.IsReadOnly()))
{
GetTxtFilePath(vFilePathList, filename + _T("/"));
}
}
}
}
递归获取目录下所有特定类型文件
void get_all_support_image_in_dir(CString directory, std::vector<CString> &list){
//路径结尾是斜线
if (directory.Right(1).Compare(L"/") && directory.Right(1).Compare(L"\\")){
directory += "\\";
}
//
CString searchPath = directory + L"*";
WIN32_FIND_DATA fileData;
HANDLE handle = FindFirstFile(searchPath, &fileData);
if (handle == INVALID_HANDLE_VALUE) {
return;
}
do {
CString fileName = fileData.cFileName;
const bool is_directory = fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if (fileName[0] == L'.') {//是本目录.或者上级目录..则跳过
continue;
}
if (is_directory) {//是子目录
//递归查找
get_all_support_image_in_dir(directory + fileName + L"\\", list);
}
else {//是文件
CString suffix[3] = { L".jpg", L".jpeg", L".png"};
for (auto suf : suffix){
if (!fileName.Right(suf.GetLength()).Compare(suf)) {
list.push_back(directory + fileName);
break;
}
}
}
} while (FindNextFile(handle, &fileData) != 0);
FindClose(handle);
}