gpt4 book ai didi

c - 如何在 C 中显示所有具有 dirent 和 stat 结构的文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:51 28 4
gpt4 key购买 nike

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

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)系统调用失败是因为您没有向他提供打开目录中文件的完整路径,如果您使用您的程序打开当前目录以外的目录。

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

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

/path/to/my/directory/name_of_the_file

path/to/my/directory/name_of_the_file

关于c - 如何在 C 中显示所有具有 dirent 和 stat 结构的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22263869/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com