1. // 001_遍历文件.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    2. //
    3. #include <atlstr.h>
    4. #include <windows.h>
    5. void listDir(const CString& path, int deep)
    6. {
    7. if (deep == 0) {
    8. return;
    9. }
    10. WIN32_FIND_DATA wfd = { 0 };
    11. HANDLE hFind = 0;
    12. // 查找第一个文件
    13. // 注意, 路径需要加上通配符
    14. hFind = FindFirstFile(path + L"\\*",
    15. &wfd);
    16. if (hFind == INVALID_HANDLE_VALUE) {
    17. return;
    18. }
    19. do
    20. {
    21. // 过滤掉当前目录和上层目录
    22. if (wcscmp(wfd.cFileName, L".") == 0
    23. || wcscmp(wfd.cFileName, L"..") == 0)
    24. {
    25. continue;
    26. }
    27. wprintf(L"%s\\%s\n",(LPCWSTR)path,wfd.cFileName);
    28. // 判断当前遍历到的数据是否是目录
    29. // 可以通过文件属性标志位来判断
    30. if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    31. {
    32. // 如果是目录, 就递归扫描这个目录
    33. // 1. 拼接成一个文件路径(遍历得到的文件名
    34. // 只是一个没有路径的文件名)
    35. // 传入进来的参数就是它所在的文件夹
    36. // 此时将文件夹和目录名拼接在一起
    37. // 就能得到一个绝对路径了
    38. CString absPath = path + L"\\" + wfd.cFileName;
    39. // 递归调用
    40. listDir(absPath, deep - 1);
    41. }
    42. } while (FindNextFile(hFind,&wfd));
    43. FindClose(hFind);
    44. }
    45. int main()
    46. {
    47. listDir(L"C:\\", 2);
    48. }