繁体   English   中英

自制的fstat获取文件大小,总是返回0长度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM