我有一个文件的长度,我想在下面的代码中使用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。我错过了哪里?
答案 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,你可以通过这种方式看到稀疏文件。