文件夹遍历代码C++(win32平台)
2008-11-10 20:43
393 查看
最近有时间,继续学习C++,写了一段遍历文件夹的代码。拿出来希望大家指教。void Common::File::ReadFiles(const wstring &directory,const wstring & extentions, void (* fileMethod)(const wstring &))
{
WIN32_FIND_DATA findData;
ZeroMemory(&findData,sizeof(findData));//对findData进行初始化
wstring findFileName(directory);
wstring fullDirectoryName(directory);
if(directory[directory.length() - 1] == '//')
{
findFileName += extentions;
fullDirectoryName = directory;
}
else
{
findFileName += L'//' + extentions;
fullDirectoryName += L'//';
}
HANDLE hFind = FindFirstFile(findFileName.c_str(), &findData);
if(hFind == INVALID_HANDLE_VALUE)
return;
FindNextFile(hFind,&findData);
vector<wstring> dirList;
while(FindNextFile(hFind,&findData))
{
if((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
dirList.push_back(fullDirectoryName + findData.cFileName);
}
else
{
wstring fullFileName(fullDirectoryName + findData.cFileName);
fileMethod(fullFileName);//对遍历文件做些什么
}
}
for(vector<wstring>::iterator iter = dirList.begin();
iter != dirList.end(); ++ iter)
{
ReadFiles(*iter,extentions,fileMethod);
}
}
在这段代码中,我使用了一个函数指针来处理遍历文件后应该做什么。C++的函数指针的声明方式真是太棒了,如果能够再支持向lambda表达式的写法,那实在是太完美了。
{
WIN32_FIND_DATA findData;
ZeroMemory(&findData,sizeof(findData));//对findData进行初始化
wstring findFileName(directory);
wstring fullDirectoryName(directory);
if(directory[directory.length() - 1] == '//')
{
findFileName += extentions;
fullDirectoryName = directory;
}
else
{
findFileName += L'//' + extentions;
fullDirectoryName += L'//';
}
HANDLE hFind = FindFirstFile(findFileName.c_str(), &findData);
if(hFind == INVALID_HANDLE_VALUE)
return;
FindNextFile(hFind,&findData);
vector<wstring> dirList;
while(FindNextFile(hFind,&findData))
{
if((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
dirList.push_back(fullDirectoryName + findData.cFileName);
}
else
{
wstring fullFileName(fullDirectoryName + findData.cFileName);
fileMethod(fullFileName);//对遍历文件做些什么
}
}
for(vector<wstring>::iterator iter = dirList.begin();
iter != dirList.end(); ++ iter)
{
ReadFiles(*iter,extentions,fileMethod);
}
}
在这段代码中,我使用了一个函数指针来处理遍历文件后应该做什么。C++的函数指针的声明方式真是太棒了,如果能够再支持向lambda表达式的写法,那实在是太完美了。
相关文章推荐
- Python与C++ 遍历文件夹下的所有图片实现代码
- WIN32 C++ 遍历文件夹
- WIN32 C++ 遍历文件夹
- 基于c++使用win32 api遍历文件夹
- Win10下C++代码文件夹遍历错误:0xC0000005: 写入位置时发生访问冲突。
- DFusion中lua调用c++生成的dll库,并且lua调用c++代码(遍历文件夹中整个目录)
- D'Fusion中lua调用c++生成的dll库,并且lua调用c++代码(遍历文件夹中整个目录)
- Python与C++ 遍历文件夹下的所有图片实现代码
- Windows平台 C++遍历文件夹
- php遍历某个文件夹以及遍历里面的所有文件夹代码实现
- 代码遍历列表的方法(支持文件夹的列表的项目遍历)
- C++下遍历文件夹内文件
- C++ 遍历文件夹下所有文件
- c++遍历指定文件夹下的所有的文件
- c++ 遍历文件夹
- C++遍历文件夹下的所有文件夹及文件
- windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
- c bash 代码遍历文件夹下所有文件
- C++ 遍历文件夹
- C++ 遍历文件夹以及子文件夹下所有文件