Эта функция не работает правильно в некоторых каталогах - PullRequest
0 голосов
/ 17 декабря 2018

Эта функция должна отображать список файлов в каталоге, но она работает только в C: \ Users \ "name" \ Desktop в других каталогах, показывает (каталог) во всех именах, которые я пробовал другими способами, но только это работает (как-то)

# include <stdlib.h>
# include <dirent.h>
# include <sys/types.h>
# include <stdio.h> 
   int list(){
        char s[50];
        struct dirent *entry;
        printf("Specify directory for list of files\n");
        scanf("%s", &s);
        DIR *dir = opendir(s);
        FILE* ff;
        if (dir){
                printf("\n\n******\n\n");
                while ((entry = readdir(dir)) != NULL) {
                ff = (fopen(entry->d_name, "r"));

                if (ff != NULL){
                    printf("%s\n",entry->d_name);
                    fclose(ff); 
                }
                else if (ff == NULL) {
                printf("%s(directory)\n",entry->d_name);
                }

            }
            printf("\n******\n");
            closedir(dir);
            return 1;
        }

1 Ответ

0 голосов
/ 17 декабря 2018

Если вы изучите содержимое entry->d_name, вы увидите, что оно содержит только имя файла, а не полный путь.Поэтому, когда вы пытаетесь открыть файл, он не может, если файл не существует в текущем каталоге.Вам нужно построить полный путь и использовать его, чтобы открыть файл.

char fullname[1024];
strcpy(fullname,s);
strcat(fullname,"\\");
strcat(fullname,entry->d_name);
ff = fopen(fullname, "r");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...