0

我有一个文件的长度,我想在下面的代码中使用 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。我在哪里想念它?

4

3 回答 3

1

我在哪里想念它?

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

于 2014-03-13T12:27:19.690 回答
1

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

        if (stat(filename, &st)) exit(EXIT_FAILURE);
        filesize = st.st_size;
于 2014-03-13T12:36:13.630 回答
0

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

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

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

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

于 2012-02-20T21:25:32.653 回答