#include <iostream>
#include <io.h>
#include <string>
using namespace std;
void listFiles(const char * dir,int tab);
int main()
{
string dir;
cout << "Enter a directory (ends with \'\\\'): ";
cin>>dir;
dir += "*.*"; // 在要遍历的目录后加上通配符
listFiles(dir.c_str(),0);
cout << "Done!\n";
system("pause");
return 0;
}
void listFiles(const char * dir,int tab)
{
intptr_t handle;
_finddata_t findData;
handle = _findfirst(dir, &findData); // 查找目录中的第一个文件
if (handle == -1)
{
cout << "Failed to find first file!\n";
return;
}
do
{
if (findData.attrib & _A_SUBDIR
&& !(strcmp(findData.name, ".") == 0
|| strcmp(findData.name, "..") == 0
)){ // 是否是子目录并且不为"."或".."
cout << findData.name << "\t<dir>\n";
string subdir(dir);
subdir.insert(subdir.find("*"), string(findData.name)+"\\");
cout << subdir << endl;
listFiles(subdir.c_str(),tab+1);//递归遍历子文件夹
}
else {
for (int i = 0; i < tab; ++i)
cout << "-";
cout << findData.name << "\t" << findData.size << endl;
}
} while (_findnext(handle, &findData) == 0); // 查找目录中的下一个文件
system("pause");
_findclose(handle); // 关闭搜索句柄
}