#include <stdio.h>
#include<io.h>
#include<string.h>
int Function(char *,char *);//文件夹遍历函数
void Connect(char*,char*,char*);//字符串连接函数
void main()
{
char a[50]="";
char b[5]="\\*.*"; // *.*代表全部类型的文件,类似的 *.txt则代表txt类型的文件
printf("输入文件夹位置:");
scanf("%s",a); //输入你要遍历的目录
printf("文件夹中的所有文件如下:\n");
Function(a,b); //调用遍历文件夹的函数
}
int Function(char *a,char *b){ //文件夹遍历函数
char c[100],*p1,*p2;
p1=c;
Connect(a,b,p1);
struct _finddata_t file;
long fHandle;
if( (fHandle=_findfirst(c, &file ))==-1L )
{
printf( "当前目录下没有文件\n");
return 0;
}
else
do{
if (file.attrib & _A_SUBDIR)
{
//判断是否为"."当前目录,".."上一层目录
if ((strcmp(file.name, ".") != 0) && (strcmp(file.name, "..") != 0))
{
char newPath[100];
p2=newPath;
Connect(a,"\\",p2);//函数执行完成后p2仍指向newPath[0]
for(int i=0;newPath[i]!='\0';i++){p2++;}//移动指针
Connect("",file.name,p2);
Function(newPath,b);//递归调用
}
}
else{
char b1[50];//用来存放文件的具体位置
int j=0;
for(int i=0;a[i]!='\0';i++)
b1[j++]=a[i];
b1[j++]='\\';
for(i=0;file.name[i]!='\0';i++)
b1[j++]=file.name[i];
b1[j]='\0';
printf("%s\n",b1);
}
}while( _findnext(fHandle,&file)==0 );
_findclose( fHandle );
return 0;
}
void Connect(char* str1, char* str2, char* p) { //字符串连接函数
int i = 0;
for (; *str1 != '\0';) {
*p = *str1;
str1++;
p++;
}
for (; *str2 != '\0';) {
*p = *str2;
str2++;
p++;
}
*p = '\0';
}
结果示例如下:
本段代码原理很简单,其中为了使结果呈现的更加具体,我加入了一些printf语句,显得内容有点多。