#include <iostream>
#include <windows.h>
#include <locale>
#include <codecvt>
#include<chrono>
using namespace std;
int i = 0;
void traverseDirectory(const wstring& directoryPath) {
WIN32_FIND_DATAW fileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
wstring searchPath = directoryPath + L"\\*";
hFind = FindFirstFileW(searchPath.c_str(), &fileData);
if (hFind == INVALID_HANDLE_VALUE) {
cerr << "Failed to find first file." << endl;
return;
}
do {
wstring fileName = fileData.cFileName;
if (fileName == L"." || fileName == L"..") {
continue;
}
wstring filePath = directoryPath + L"\\" + fileName;
if (fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
traverseDirectory(filePath); // 递归遍历子目录
}
else {
wprintf(L"%ls\n", filePath.c_str()); // 输出文件路径到控制台
i++;
}
} while (FindNextFileW(hFind, &fileData) != 0);
FindClose(hFind);
}
int main()
{
auto t1 = std::chrono::steady_clock::now();
locale::global(locale(".OCP")); // 设置全局区域为本地字符集
wstring directoryPath = L".";
traverseDirectory(directoryPath);
auto t2 = std::chrono::steady_clock::now();
double dms = std::chrono::duration<double, std::milli>(t2 - t1).count();
cout << "\n\n共计文件个数:" << i << endl;
printf("耗时%.2fms\n\n", dms);
system("pause");
return 0;
}
结果: