用C语言实现遍历磁盘上的所有文件
时间:2010-11-19 来源:teiller2008
算法描述如下:
while 当前文件夹有文件 { if 文件是子文件夹 递归调用; else 处理该文件 } |
其中,fblk为指定的保存文件信息的一个结构,定义如下:
┏━━━━━━━━━━━━━━━━━━┓ ┃struct ffblk ┃ ┃{ ┃ ┃ char ff_reserved[21]; /*DOS保留字*/┃ ┃ char ff_attrib; /*文件属性*/ ┃ ┃ int ff_ftime; /*文件时间*/ ┃ ┃ int ff_fdate; /*文件日期*/ ┃ ┃ long ff_fsize; /*文件长度*/ ┃ ┃ char ff_name[13]; /*文件名*/ ┃ ┃} ┃ ┗━━━━━━━━━━━━━━━━━━┛ attrib为文件属性,由以下字符代表 ┏━━━━━━━━━┳━━━━━━━━┓ ┃FA_RDONLY 只读文件┃FA_LABEL 卷标号┃ ┃FA_HIDDEN 隐藏文件┃FA_DIREC 目录 ┃ ┃FA_SYSTEM 系统文件┃FA_ARCH 档案 ┃ ┗━━━━━━━━━┻━━━━━━━━┛ |
例:
struct ffblk f;
findfirst("*.TXT",&f,FA_RDONLY); 表示搜寻后缀名是TXT的只读文件。
运行环境:XP
编译器:turboc2.0
#include "stdio.h" #include "stdlib.h" #include "dir.h" #include "string.h" #include "dos.h" void pathFile(char const *path); static char *hardDevice[4]={"C:","D:","E:","F:"}; static long count=0; main() { int i; clrscr(); for(i=0;i<4;i++) pathFile(hardDevice); printf("\nTotally:%Ld",count); getch(); } void pathFile(char const *path) { struct ffblk f; int done; char dir[255]={0},tmp[255]; strcpy(tmp,path); /*查找当前目录所有文件*/ done=findfirst(strcat(tmp,"\\*.*"),&f,FA_DIREC); while(!done) { /* 判断该文件属性是否为文件夹,FA_DIREC是文件属性为子目录(子文件夹)*/ if(strcmp(f.ff_name,".")!=0 &&strcmp(f.ff_name,"..")!=0&& f.ff_attrib==FA_DIREC) { /*printf("This is a file.");*/ strcpy(dir,path); strcat(dir,"\\"); strcat(dir,f.ff_name); pathFile(dir);/*递归遍历*/ } /* *不输出文件夹名和.和.. */ if(strcmp(f.ff_name,".")!=0 && strcmp(f.ff_name,"..")!=0) if(strstr(f.ff_name,".EXE")!=NULL) /*输出后缀名是EXE的可执行文件,去掉此条语句,输出所有后缀名文件*/ { printf("%s\t",f.ff_name); count++; } done=findnext(&f); } } |
相关阅读 更多 +