/*
功能:演示了利用C语言递归遍历指定目录下的子目录和文件!
说明:经修改也可以搜索文件名符合特定格式的文件,如修改“\\*.*”为“\\*.log”
*/
#include <iostream>
#include <string>
#include <io.h>
using namespace std;
void filesearch(string path, int layer)
{
struct _finddata_t filefind;
string curr = path + "\\*.*"; // 修改此处改变搜索条件
int done = 0, i, handle;
if((handle = _findfirst(curr.c_str(), &filefind)) != -1)
{
while(!(done = _findnext(handle, &filefind)))
{
if(strcmp(filefind.name, "..") == 0)
continue;
for(i = 0;i <layer; i++)
printf("\t");
if((_A_SUBDIR == filefind.attrib)) // 是目录
{
printf("[Dir]:\t%s\n", filefind.name);
curr = path + "\\" + filefind.name;
filesearch(curr, layer+1); // 递归遍历子目录
}
else
{
printf("[File]:\t%s\n", filefind.name);
}
}
_findclose(handle);
}
}
int main()
{
string path("E:\\Program\\Proc");
filesearch(path, 0);
return 0;
}
运行结果如:
[File]: 20111010.log
[File]: 20111011.log
[File]: 20111012.log
[File]: 20111013.log
[File]: 20111014.log
[Dir]: demo10_1
[Dir]: Debug
[File]: demo10_1.exe
[File]: demo10_1.obj
[File]: demo10_1.pdb
[File]: demo10_1.sbr
[File]: vc60.pdb
[File]: demo10_1.c
[File]: demo10_1.dsp
[File]: demo10_1.dsw
[File]: demo10_1.ncb
[File]: demo10_1.opt
[File]: demo10_1.pc
[File]: demo10_1.plg
[Dir]: proc
[File]: sqlnet.log
[Dir]: demo10_2
[Dir]: Debug
[File]: demo10_2.exe
[File]: demo10_2.obj
[File]: demo10_2.pdb
[File]: vc60.pdb
[File]: demo10_2.c
[File]: demo10_2.dsp
[File]: demo10_2.dsw
[File]: demo10_2.ncb
[File]: demo10_2.opt
[File]: demo10_2.pc
[File]: demo10_2.plg
[Dir]: proc
[Dir]: demo2
[Dir]: Debug
[File]: demo2.exe
[File]: demo2.obj
[File]: demo2.pdb
[File]: demo2.sbr
[File]: vc60.pdb
[File]: demo2.c
[File]: demo2.dsp
[File]: demo2.dsw
[File]: demo2.ncb
[File]: demo2.opt
[File]: demo2.pc
[File]: demo2.plg
[Dir]: proc
[File]: sqlnet.log
[Dir]: demo6_2
[Dir]: Debug
[File]: demo6_2.exe
[File]: demo6_2.pdb
[File]: m.obj
[File]: vc60.pdb
[File]: demo6_2.dsp
[File]: demo6_2.dsw
[File]: demo6_2.ncb
[File]: demo6_2.opt
[File]: demo6_2.plg
[File]: m.c
[File]: m.pc
[Dir]: proc
[File]: pre_20111015.log
请按任意键继续. . .