可以使用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);
}