我正在尝试使用自己的函数从文件中获取文件大小。我将使用它为数据结构分配内存以保存文件中的信息。
文件大小功能如下所示:
long fileSize(FILE *fp){
long start;
fflush(fp);
rewind(fp);
start = ftell(fp);
return (fseek(fp, 0L, SEEK_END) - start);
}
我在这里做错了什么想法?
答案 0 :(得分:3)
待办事项
fseek(fp, 0L, SEEK_END);
return (ftell(fp) - start);
而不是
return (fseek(fp, 0L, SEEK_END) - start);
因为fseek在成功时返回零而不是您在此期望的偏移量。
答案 1 :(得分:1)
一些评论:
不要致电fflush()
- 您的信息流可能是一个读取流,fflush()
会导致未定义的行为
您没有任何错误检查!
fseek()
返回0表示成功 - 您需要致电ftell()
以获取长度
将代码更改为:
long fileSize(FILE *fp)
{
fseek(fp, 0L, SEEK_END);
return ftell(fp);
}
答案 2 :(得分:0)
您需要在ftell
之后致电fseek
。尝试:
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);
}
另外,请确保以二进制模式打开文件。