我正在尝试在“第一个”文件夹中列出文件及其大小,但我对每两个文件进行了奇怪的重复。
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
struct dirent *dirPtr;
struct stat st;
void main()
{
DIR * dirp;
if((dirp=opendir("first"))==NULL)
{
printf("There has been an error");
}
while(dirPtr=readdir(dirp))
{
printf("%s - ", dirPtr->d_name);
stat(dirPtr->d_name, &st);
printf(" file size: %lu\n", st.st_size);
}
closedir(dirp);
}
这是我的输出:
有谁知道为什么会这样?
答案 0 :(得分:2)
对于初学者,您应该检查“stat()”的返回结果,如果stat()失败,则打印错误#(而不是文件大小)。
另外:“opendir()”正在从某个任意目录中读取文件。
问:“dirPtr-&gt; d_name”是否包含完整的文件路径...或只是文件名?换句话说,你是否试图从错误的目录“stat()”?
答案 1 :(得分:2)
您基本上是在呼叫stat("test.c", &st)
。 stat
如何知道test.c
目录是什么?我认为不可以。
我认为您应该尝试stat("./first/test.c", &st)
或stat("/full/path/to/first/test.c", &st)
。更好的是,您应该找到一些像stat
这样的函数,它以struct dirent
为参数,因此您不必担心串联字符串。
我会看到是否有这样的功能并在我找到答案时编辑我的答案。
答案 2 :(得分:1)
每个目录至少有两个条目,当前目录 - 单个点.
- 和父目录 - 两个点..