此功能在某些目录中无法正常工作

时间:2018-12-17 11:00:00

标签: c

此功能应显示目录中的文件列表,但是, 它仅适用于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 :(得分:2)

如果检查entry->d_name的内容,您会发现它仅包含文件名而不包含完整路径。因此,当您尝试打开文件时,除非文件存在于当前目录中,否则无法打开文件。您需要构建完整路径并使用该路径打开文件。

char fullname[1024];
strcpy(fullname,s);
strcat(fullname,"\\");
strcat(fullname,entry->d_name);
ff = fopen(fullname, "r");