【问题标题】:Homemade fstat to get file size, always returns 0 length自制 fstat 获取文件大小,总是返回 0 长度
【发布时间】:2011-02-01 11:41:17
【问题描述】:
我正在尝试使用我自己的函数从文件中获取文件大小。我将使用它为数据结构分配内存以保存文件信息。
文件大小函数如下所示:
long fileSize(FILE *fp){
long start;
fflush(fp);
rewind(fp);
start = ftell(fp);
return (fseek(fp, 0L, SEEK_END) - start);
}
有什么想法我在这里做错了吗?
【问题讨论】:
标签:
c
file
file-io
binary
fseek
【解决方案1】:
做
fseek(fp, 0L, SEEK_END);
return (ftell(fp) - start);
而不是
return (fseek(fp, 0L, SEEK_END) - start);
因为fseek 成功返回零而不是您在这里期望的偏移量。
【解决方案2】:
几个cmets:
把代码改成这样:
long fileSize(FILE *fp)
{
fseek(fp, 0L, SEEK_END);
return ftell(fp);
}
【解决方案3】:
您需要在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);
}
另外,请确保以二进制模式打开文件。