【问题标题】:Why fread returns Zero and when the files has contents为什么 fread 返回零以及文件何时包含内容
【发布时间】:2019-07-07 12:32:37
【问题描述】:

我试图读取文件“sym.dat”的内容,即使文件的内容 fread 返回零,我也尝试使用 ferror,但它没有显示任何错误。

FILE *fp;
fp=fopen("sym.dat","ab");

struct node a;
    fseek(fp, 0L, SEEK_SET); 

while((fread(&a,sizeof(struct node),1,fp))==1)
{

printf("bello");

}}

返回 0

【问题讨论】:

  • fread 返回零时,您是否尝试过检查feofferror 以了解原因?
  • 您应该以rb 模式打开文件,而不是abab 用于写入而不是读取,它位于文件末尾。
  • 您确定“有内容”的文件在当前工作目录中吗?
  • 我尝试了 feof 和 ferror 但它没有显示任何错误。我必须读取文件的内容并向其附加一些内容。这就是我使用ab模式的原因。 @Barmar
  • 你确定你打开了文件吗?因为您阅读了它,为什么不使用“rb”标志打开它?你不检查 fopen 的结果。为什么要调用 fseek

标签: c file structure binaryfiles symbol-table


【解决方案1】:

在做

 fp=fopen("sym.dat","ab");

您打开文件以从其末尾写入,而不是在其中读取,因此while((fread(&a,sizeof(struct node),1,fp))==1) 中的测试立即为假并且您不打印“贝洛”

fp=fopen("sym.dat","rb");

并检查 fp 不为 NULL。

fseek 没用,当你打开它时你就在它的开头

别忘了关闭文件


如果你需要在其中读写,用标志“rb+”打开它,fseek仍然没用。

【讨论】:

  • 谢谢。但我想在二进制文件中搜索并插入记录。那么用rb+可以吗
  • @mystica 是的,正如我在回答中所说,使用 rb+ 没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多