[英]Homemade fstat to get file size, always returns 0 length
我试图使用我自己的函数从文件中获取文件大小。 我将使用它为数据结构分配内存以保存文件中的信息。
文件大小函数如下所示:
long fileSize(FILE *fp){
long start;
fflush(fp);
rewind(fp);
start = ftell(fp);
return (fseek(fp, 0L, SEEK_END) - start);
}
我在这里做错了什么想法?
做
fseek(fp, 0L, SEEK_END);
return (ftell(fp) - start);
代替
return (fseek(fp, 0L, SEEK_END) - start);
因为fseek在成功时返回零,而不是像你期望的那样偏移。
一些评论:
不要调用fflush()
- 您的流可能是读取流, fflush()
导致未定义的行为
你没有任何错误检查!
fseek()
返回0表示成功 - 你需要调用ftell()
来获取长度
将代码更改为:
long fileSize(FILE *fp)
{
fseek(fp, 0L, SEEK_END);
return ftell(fp);
}
你需要在fseek
之后调用ftell
。 尝试:
long fileSize(FILE *fp){
long start;
fflush(fp);
rewind(fp);
start = ftell(fp);
fseek(fp, 0L, SEEK_END);
return ftell(fp);
}
没有必要做任何改变,所以你的第一个ftell
是无用的,你可以摆脱它。 我会用:
long filezise(FILE *fp)
{
fseek(fp,OL,SEEK_END);
// fseek(f, 0, SEEK_SET); - only if you want to seek back to the beginning
return ftell(fp);
}
此外,请确保以二进制模式打开文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.