2014-12-21 12 views
0

여러 개의 하위 디렉토리가있는 디렉토리에 대한 경로가 표시됩니다. 모든 하위 디렉토리에는 "st"라는 이름의 파일이 있습니다. 나는 모든 하위 디렉토리에서 모든 st 파일을 읽으려고하는데 항상 fopen을 호출 할 때 NULL 포인터를 받는다 ???하위 디렉토리에있는 파일을 읽는 중

내 코드 :

int main(){ 

DIR *dir; 
struct dirent *ent; 
FILE *st; 

dir=opendir("/home/me/Desktop/dir/"); 

while((ent=readdir(dir)) != NULL){ 

    if(ent->d_type == DT_DIR && strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0){ 

     DIR *subDir = opendir(ent->d_name); 

     st = fopen("st", "r"); 

     if(st == NULL){ 
      perror("doesn't exist"); 

     } 

    } 

} 
closedir(dir); 

}  

답변

1

문제는 end->d_name에있는 이름이 디렉토리 안에있는 "파일"의 이름 만, 그것은

DIR *subDir = opendir(ent->d_name); 
에 전화를 의미하는 전체 경로, 아니에요 때문이다

현재 디렉토리의 디렉토리를 찾으려고 시도합니다.

전달한 경로를 첫 번째 opendir 호출로 가져 와서 새 경로 부분을 추가해야합니다.

+0

그럼 다른 direcotroy 포인터 (DIR * subDir)를 생성해야하거나 첫 번째 (DIR * dir)을 바꿀 수 있습니까? – Matthew

+0

도 아닙니다. 그냥 이름을 연결하십시오. – abligh

+1

루트 문제 - 만성적 인 디버깅이 불가능합니다. –