使用FindFirstFile 和FindNextFile两个函数进行遍历查找。
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; //文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高32位
DWORD nFileSizeLow; // 文件长度低32位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 文件名
TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;
函数如下:
static int find(TCHAR * dir)
{
TCHAR *tmp;
WIN32_FIND_DATA FindFileData; //WIN32_FIND_DATA结构描述了一个由FindFirstFile, FindFirstFileEx, 或FindNextFile函数查找到的文件信息
tmp = (TCHAR *)malloc(GHOSTCOPY_MAX_PATH_LENGTH);
_tcscpy(tmp, dir);
_tcscat(tmp, _T("\\*.*")); //必须得设置通配符
HANDLE hFind = FindFirstFile(tmp, &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
return 0;
//_tprintf(_T("%s!\n"), FindFileData.cFileName);
while (TRUE)
{
//判断是不是目录,如果当前文件是目录文件,则递归调用findFile
if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
if (FindFileData.cFileName[0] != _T('.'))
{
_tcscpy(tmp, dir);
_tcscat(tmp, _T("\\"));
_tcscat(tmp, FindFileData.cFileName);
_tprintf(_T("%s\n"), tmp);
//输出文件夹路径
_tprintf(_T("%s is a direction!\n"), FindFileData.cFileName);
find(tmp);
}
}
else
{
_tcscpy(tmp, dir);
_tcscat(tmp, _T("\\"));
_tcscat(tmp, FindFileData.cFileName);
_tprintf(_T("%s\n"), tmp);
//输出文件路径
_tprintf(_T("%s is a file!\n"), FindFileData.cFileName);
}
if (!FindNextFile(hFind, &FindFileData))
break;
}
FindClose(hFind);
free(tmp);
return 0;
}