// 001_遍历文件.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <atlstr.h>
#include <windows.h>
void listDir(const CString& path, int deep)
{
if (deep == 0) {
return;
}
WIN32_FIND_DATA wfd = { 0 };
HANDLE hFind = 0;
// 查找第一个文件
// 注意, 路径需要加上通配符
hFind = FindFirstFile(path + L"\\*",
&wfd);
if (hFind == INVALID_HANDLE_VALUE) {
return;
}
do
{
// 过滤掉当前目录和上层目录
if (wcscmp(wfd.cFileName, L".") == 0
|| wcscmp(wfd.cFileName, L"..") == 0)
{
continue;
}
wprintf(L"%s\\%s\n",(LPCWSTR)path,wfd.cFileName);
// 判断当前遍历到的数据是否是目录
// 可以通过文件属性标志位来判断
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// 如果是目录, 就递归扫描这个目录
// 1. 拼接成一个文件路径(遍历得到的文件名
// 只是一个没有路径的文件名)
// 传入进来的参数就是它所在的文件夹
// 此时将文件夹和目录名拼接在一起
// 就能得到一个绝对路径了
CString absPath = path + L"\\" + wfd.cFileName;
// 递归调用
listDir(absPath, deep - 1);
}
} while (FindNextFile(hFind,&wfd));
FindClose(hFind);
}
int main()
{
listDir(L"C:\\", 2);
}