可以使用FindFirstFile, FindNextFile, FindClose遍历指定目录下的目录和文件。
以下函数遍历并打印指定路径path下的所有文件和目录:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <string.h>
#include <strsafe.h>
void FileTraverse(TCHAR* path)
{
TCHAR szDir[MAX_PATH];
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA fd;
StringCchCopy(szDir, MAX_PATH, path);
StringCchCat(szDir, MAX_PATH, TEXT("\\*")); //需要附加"\\*",否则,不会遍历所有文件
hFind = FindFirstFile(szDir, &fd);
if (INVALID_HANDLE_VALUE == hFind)
{
//printf("Find file failed!\n");
return;
}
do
{
if (fd.cFileName[0] != TEXT('.')) //跳过当前目录'.'以及上级目录'..'
{
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //目录
{
_tprintf(TEXT("%s\\%s <DIR>\n"), path, fd.cFileName);
StringCchCopy(szDir, MAX_PATH, path);
StringCchCat(szDir, MAX_PATH, TEXT("\\"));
StringCchCat(szDir, MAX_PATH, fd.cFileName);
FileTraverse(szDir); //递归遍历子目录
}
else //文件
{
_tprintf(TEXT("%s\n"), fd.cFileName);
}
}
} while (FindNextFile(hFind, &fd));
FindClose(hFind);
}