为什么文件大小重复?

时间:2011-11-05 14:58:50

标签: c

我正在尝试在“第一个”文件夹中列出文件及其大小,但我对每两个文件进行了奇怪的重复。

#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);
}

这是我的输出:

enter image description here

有谁知道为什么会这样?

3 个答案:

答案 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)

每个目录至少有两个条目,当前目录 - 单个点. - 和父目录 - 两个点..