好的,所以我试图显示给定路径名内的所有文件。对于我输入的第一个路径,所有文件均正确显示。但是,当我使用子目录路径作为函数的参数时,它仅显示单个可执行文件(子目录中还有其他文件作为测试)。我绝对不知道为什么会这样。我将在下面发布相关的代码片段,对此的任何帮助将不胜感激。
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);
}
您的问题是stat(2)
系统调用失败,因为在使用程序打开当前目录以外的目录的情况下,您没有为他提供打开目录中文件的完整路径。
这解释了为什么您的代码仅在打开当前目录时有效。
一种解决方案是将您要打开的目录的路径附加到结构d_name
成员中包含的文件的名称中,dirent
例如:
/ path / to / my / directory / name_of_the_file
或者
路径/到/我/目录/文件名
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句