1

好的,所以我试图显示给定路径名中的所有文件。对于我输入的第一个路径,所有文件都正确显示。但是,当我使用子目录路径作为函数的参数时,它只显示一个可执行文件(子目录中还有其他文件作为测试)。我绝对无法弄清楚为什么会这样。我将在下面发布相关的代码片段,对此的任何帮助将不胜感激。

struct dirent *directory;
DIR *pdirectory;
struct stat fileinfo;




pdirectory=opendir(path);
    if (pdirectory==NULL)
    {
            printf("Error: Unable to open directory\n");
            exit(0);
    }
    printf("%s\n",path);
    while ((directory=readdir(pdirectory)) != NULL)
    {

        if (!stat(directory->d_name,&fileinfo))
        {
            if (S_ISREG(fileinfo.st_mode))
            { 
              printf("File Name:              %s\n",directory->d_name); 
              printf("File Size:              %d bytes\n",fileinfo.st_size);
              printf("Last Access:            %s\n",ctime(&fileinfo.st_atime));
            }
            }


    }
        closedir(pdirectory);
   }
4

1 回答 1

1

您的问题是stat(2)系统调用失败,因为您没有向他提供位于打开目录中的文件的完整 路径,如果您使用程序打开当前目录以外的目录。

这解释了为什么您的代码仅在打开当前目录时才有效。

一种解决方案是将要打开的目录的路径附加到结构d_name成员中包含的文件的名称中,dirent例如:

/path/to/my/directory/name_of_the_file

或者

路径/到/我的/目录/name_of_the_file

于 2014-03-08T02:02:56.027 回答