2016-05-21 3 views
0

в одном из моих упражнений Мне нужно открыть папку благодаря C. Я делаю это с помощью библиотеки dirent, после чего я успеваю отобразить на экране имя каждого файла в папке. Но теперь я хочу открывать каждый раз, когда текущий файл, который был напечатан на экране. Поэтому я делаю это с fopen, но каждый раз, когда мой fopen возвращает мне NULL, что я могу сделать, чтобы каждый раз открывать текущий файл. Спасибо!Открыть двоичный файл

Вот мой код:

void OpenDirectory(char *Folder, char *Virus){ 
DIR * dir = NULL; 
struct dirent* CurrentFile = NULL; 

dir = opendir(Folder); 
if (dir == NULL){ 
    perror(""); 
} 
else 
{ 
    while ((CurrentFile = readdir(dir))!= NULL) 
    { 
     if (!strcmp(CurrentFile->d_name, ".") || !strcmp(CurrentFile->d_name, "..")) 
     { 
      // Don't do anything 
     } 
     else 
     { 
      printf("Current file is : %s\n", CurrentFile->d_name); 
      Myfile(CurrentFile->d_name); 
     } 
    } 
} 


} 

void Myfile(FILE* File1){ 
File1 = fopen(File1, "rb"); 
printf("File is : %s", File1); 
if (File1 == NULL) 
{ 
    printf("The file source doesn't exist !\n"); 
} 
else 
{ 
    printf("Welcome"); 
} 
} 
+1

Показать распечатку, т.е. какая спецификация файла распечатана 'printf («Файл:% s», File1); ». Очевидно, что для работы fopen() это должно быть допустимым именем AND PATH. –

+0

Как я могу это сделать, потому что папка, которая содержит весь файл, находится не в том же каталоге моей программы .c –

+0

Вы должны добавить имя файла в спецификацию папки, содержащей его (strcat). –

ответ

1

Справочник содержит имена файлов.

Таким образом, первое имя файла может быть foo, и именно это вы выйдете из дирента. Итак, вы пытаетесь открыть его, эффективно делая fopen("foo", "r");.

Но это означает «Открыть файл с именем fooв текущем рабочем каталоге». Поскольку файл находится в каком-то подкаталоге, он не будет найден.

Одно решение - cwd в каталог каждый раз, когда вы начинаете работу над новым каталогом. Это прекрасно работает; вызов возвращается в родительский каталог, когда вы закончите.

Смежные вопросы