C에서 ls -R과 같은 것을 구현하려고 할 때 문제가 발생했습니다. 목록에서 재귀 적으로 모든 항목을 나열한 다음 목록에서 가져 오는 일반 파일로 내용을 처리해야합니다. . 이것은 내가 지금까지 무엇을 가지고 :재귀 목록
void ls(char* path){
DIR *directory;
struct dirent *filei;
struct stat stats;
directory = opendir(path);
if (directory != NULL)
{
while ((filei=readdir(directory))!=NULL){
stat(filei->d_name, &stats);
printf(" %s\n", filei->d_name);
if (S_ISDIR(stats.st_mode)){
char *buf = malloc(strlen(path)+strlen(filei->d_name)+2);
strcpy(buf,path);
strcat(buf,"/");
strcat(buf,filei->d_name);
ls(buf);
}
}
closedir(directory);
}
else{
printf("Error.\n");
}
}
이 작동하지 않습니다 전혀, 심지어는 폴더에 내가 함께 일하고 있어요되지 않은 파일을 보여줍니다. 의견이 있으십니까? 감사합니다. .
파일/디렉터리 작업을 사용할 때 일반적으로 발생하는 문제입니다. 'd_name'은 전체 경로가 아닙니다. 따라서 현재 디렉토리가 그 파일/디렉토리를 포함하지 않는 한'stat' 할 수 없습니다. 'opendir'은 현재 디렉토리를 변경하지 않습니다. 'stat'를 호출하기 전에'chdir'을 호출해야합니다. 또는 전체 경로 이름을 구성하십시오. – kaylum
또한'.' 및'..' 항목을 필터링해야합니다. 그렇지 않으면 infinete 재귀로 끝날 것입니다. – kaylum
이것은 무한 재귀 문제를 해결하지만 아직 작동하지 못합니다. 이미이 전체 경로를 구성하고 있지 않습니까? strcat (buf, path); strcat (buf, "/");' 'strcat (buf, path); (buf, filei-> d_name); ' – Stieg