void print(const char* filename)
{
printf("%s\n",filename);
}
int main(int argc , char * argv[])
{
printf("total %d files\n", scan_files(argv[1], print));
return 0;
}
int scan_files(const char* dir_name, void*(*deal_file)(const char*) )
{
DIR * dir;
struct dirent * dent;
char *temp;
int file_cnt=0;
if(dir = opendir(dir_name)) //a directory
{
while(dent = readdir(dir))
{
if( dent->d_name[0] == '.' )
continue;
temp=malloc(strlen(dir_name)+strlen(dent->d_name)+2);
strcpy(temp,dir_name);
strcat(temp,"/");
strcat(temp,dent->d_name);
file_cnt += scan_files(temp, deal_file);
free(temp);
}
closedir(dir);
}
else if(errno == ENOTDIR) //a file
{
deal_file(dir_name);
return 1;
}
return file_cnt;
}
原帖:http://tieba.baidu.com/club/9808510/p/8965625
{
printf("%s\n",filename);
}
int main(int argc , char * argv[])
{
printf("total %d files\n", scan_files(argv[1], print));
return 0;
}
int scan_files(const char* dir_name, void*(*deal_file)(const char*) )
{
DIR * dir;
struct dirent * dent;
char *temp;
int file_cnt=0;
if(dir = opendir(dir_name)) //a directory
{
while(dent = readdir(dir))
{
if( dent->d_name[0] == '.' )
continue;
temp=malloc(strlen(dir_name)+strlen(dent->d_name)+2);
strcpy(temp,dir_name);
strcat(temp,"/");
strcat(temp,dent->d_name);
file_cnt += scan_files(temp, deal_file);
free(temp);
}
closedir(dir);
}
else if(errno == ENOTDIR) //a file
{
deal_file(dir_name);
return 1;
}
return file_cnt;
}
原帖:http://tieba.baidu.com/club/9808510/p/8965625









