void PrintDir(const char *path, const char *ext = "*")
{
//文件信息
WIN32_FIND_DATA ffd;
string dir = path;
dir += "\\";
dir += ext;
//打开目录,获取第一个文件/目录
HANDLE hFind = FindFirstFile(A2WString(dir.c_str()).c_str(), &ffd);
if(hFind == INVALID_HANDLE_VALUE){
cout << "open dir failed" << path << endl;
return;
}
do{
string filename = W2AString(ffd.cFileName);
// 过滤当前目录和上级目录
if(filename == "." || filename == ".."){
continue;
}
// 对目录打印目录名并递归处理,对于文件直接打印
if(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
cout << filename << "< dir>" << endl;
// 递归访问子目录
string sub = path;
sub += "\\";
sub += filename;
PrintDir(sub.c_str(), ext);
}
else {
// 打印文件名及文件大小
LARGE_INTEGER size;
size.HighPart = ffd.nFileSizeHigh;
size.LowPart = ffd.nFileSizeLow;
cout << filename << size.QuadPart << "bytes" << endl;
}
}while(FindNextFile(hFind, &ffd) != 0);
//关闭打开目录句柄
FindClose(hFind);
}