### 使用递归函数遍历磁盘目录

我们要实现查找磁盘中的文件时，不可避免的需要实现遍历磁盘目录的功能。通常我们使用递归的方式来遍历磁盘目录。首先查找一个文件，然后查找当前目录下的其他文件，在查找过程中判断如果文件是一个子目录，则进入子目录进行相同方式的查找。

答案：

#define MAXLEN 1024 //定义最大目录长度

unsigned long filenum = 0; //记录文件数量

void ListDir(const char* pchData) //递归函数开始

{

_finddata_t fdata; //定义一个查找文件的对象

long done;

char tempdir[MAXLEN]={0}; //定义一个临时字符数组记录目录

strcat(tempdir,pchData);

strcat(tempdir , "\\*.*"); //在目录结尾添加\*.*

done = _findfirst(tempdir, &fdata); //开始首次文件查找

if (done != -1) //如果查找成功

{

int ret = 0;

while (ret != -1) //开始查找其他文件

{

if (fdata.attrib != _A_SUBDIR) //如果当前文件不是目录

{

if (strcmp(fdata.name,"...") != 0 &&

strcmp(fdata.name,"..") != 0 &&

strcmp(fdata.name,".") != 0) //并且不是.

{

char dir[MAXLEN]={0};

strcat(dir,pchData);

strcat(dir,"\\");

strcat(dir,fdata.name); //获取完整的文件名

printf("%s\n",dir); //输出文件

filenum++;

}

}

ret = _findnext(done,&fdata); //查找下一个文件

if (fdata.attrib == _A_SUBDIR && ret != -1) //如果文件是目录

{

if (strcmp(fdata.name,"...") != 0 &&

strcmp(fdata.name,"..") != 0 &&

strcmp(fdata.name,".") != 0) //不是.文件

{

char pdir[MAXLEN]= {0};

strcat(pdir,pchData);

strcat(pdir , "\\");

strcat(pdir,fdata.name); //获取完整目录名

ListDir(pdir); //递归调用

}

}

}

}

}