遍历磁盘文件的API为FindFirstFile和FindNextFile
其原型如下:
//INVALID_HANDLE_VALUE 表示失败
HANDLE FindFirstFile(
LPCTSTR lpFileName, //文件路径
LPWIN32_FIND_DATA lpFindFileData //文件信息结构
);
//返回非0表示成功,0表示失败
BOOL FindNextFile(
HANDLE hFindFile, //FindFirstFile返回的文件句柄
LPWIN32_FIND_DATA lpFindFileData //文件信息结构
);
代码如下:
BOOL SearchFile(TCHAR* szPath)
{
WIN32_FIND_DATA windata = { 0 }; //文件信息结构
HANDLE hFile = NULL;
TCHAR szPathNext[MAX_PATH]; //存放下一级目录路径
ZeroMemory(szPathNext, sizeof(szPathNext));
sprintf(szPathNext, "%s//*.*", szPath); //递归的时候继续深入下一级目录查找文件
hFile = FindFirstFile(szPathNext, &windata);//查找第一个文件(夹)
if (hFile == INVALID_HANDLE_VALUE)
return FALSE;
do
{
if(windata.cFileName[0] == '.') //如果是当前目录或者上级目录,则进入下一次循环
continue;
if (windata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //判断是否是文件夹
{
sprintf(szPathNext, "%s//%s", szPath, windata.cFileName);
SearchFile(szPathNext); //递归查找
}
else
{
printf("%s//%s\n", szPath, windata.cFileName);//如果是文件则输出文件路径
}
} while (FindNextFile(hFile,&windata)); //如果深入到最后一层没有文件了则以次退出到上一层目录
FindClose(hFile);
return TRUE;
}
例如:
SearchFile(“C:\temp”);
其结果如图:
需要注意的是如果用TCHAR类型,最好把字符集设为未设置,否则遇到中文路径会出错的.