2014-12-21 6 views
0

Мне предоставлен путь к каталогу с подкаталогами mutiple. Каждый подкаталог имеет файл с именем «st». Я пытаюсь прочитать каждый файл st из каждого подкаталога, но я всегда получаю указатель NULL при вызове fopen ???чтение файла в подкаталоге

Мой код:

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

Мне также нужно создать другой указатель directcotroy (DIR * subDir) или я могу просто изменить первый (DIR * dir)? – Matthew

+0

Ни то, ни другое. Просто соедините имена. – abligh

+1

Проблема с корнем - хроническая неспособность выполнять любую отладку. –