使用C中的stat()获取文件的长度

时间:2012-02-20 19:52:51

标签: c data-structures stat

我有一个文件的长度,我想在下面的代码中使用stat()函数:

FILE *file = fopen(filename, "r");
 int filesize, i;


 if(file==NULL)
{
        printf("Could not open mea.dat!\n");
    return ; 
}

        struct stat st;
        stat(filename, &st);
        filesize = st.st_size;
  .........

但是当我检查文件大小时,我得到值1504,即使只是通过数字计算,文件内容的长度是101,因此文件大小应该是102。我错过了哪里?

3 个答案:

答案 0 :(得分:1)

  

我错过了哪里?

stat()返回的大小和以数字计算(无论这意味着什么)得到的大小不同时,可能是你的计数错误。

答案 1 :(得分:1)

在决定信任结构中的值之前,您需要检查stat()的返回值

        if (stat(filename, &st)) exit(EXIT_FAILURE);
        filesize = st.st_size;

答案 2 :(得分:0)

有问题的文件是稀疏文件吗?

对于稀疏文件,磁盘上没有数据块,但是由ls -l报告。这是一个稀疏文件示例:

ls -ls sparse
2 -rw-r--r-- 1 root sys 1048577 Feb 20 12:58 sparse

最左边的2是实际使用的块数,1088577是文件分配的字节数(并非所有块实际都在磁盘上)。由于2个块(通常在盒子上1024个我这样做)不加起来1058577,你可以通过这种方式看到稀疏文件。