递归遍历目录,列出目录中的文件,代码:
#include #include #include #include #include #include #include #define MAX_PATH 512 //最大文件长度定义为512
/*对目录中所有文件执行print_file_info操作*/
void dirwalk(char *dir, void (*func)(char *))
{
char name[MAX_PATH];
struct dirent *dp;
DIR *dfd;
if((dfd = opendir(dir)) == NULL){
fprintf(stderr, "dirwalk: can't open %s\n", dir);
return;
}
while((dp = readdir(dfd)) != NULL){ //读目录记录项
if(strcmp(dp->d_name, ".") == 0 || strcmp(dp -> d_name, "..") == 0){
continue; //跳过当前目录以及父目录
}
if(strlen(dir) + strlen(dp -> d_name) + 2 > sizeof(name)){
fprintf(stderr, "dirwalk : name %s %s too long\n", dir, dp->d_name);
}else{
sprintf(name, "%