为什么 fread() 不起作用,但 fwrite() 却可以正常工作?

问题描述 投票:0回答:1

我正在使用 NXP 微控制器,该微控制器在连接到调试器时具有 stdio 功能。我使用 fwrite() 将数据写入二进制文件没有任何问题,这样我就可以使用外部程序监视和绘制值。我现在尝试走另一条路,但我无法让 fread() 工作。我已将代码简化为我能想到的最简单的示例,但它仍然无法读取文件:

#include <stdio.h>

int main (void)
{
  FILE *fp;
  int16_t writeData[5] = {1, 2, 3, 4, 5};
  int16_t readData[5] = {0, 0, 0, 0, 0};
  int16_t nData;

  // write to file
  fp = fopen("testFile.dat", "wb");
  nData = fwrite(&writeData, sizeof(uint16_t), 5, fp);
  fclose(fp);

  // read from file
  fp = fopen("testFile.dat", "rb");
  nData = fread(&readData, sizeof(uint16_t), 5, fp);
  fclose(fp);
}

我正在逐行执行代码。写入文件后,nData = 5 并且文件内容如预期“01 00 02 00 03 00 04 00 05 00”(使用 Windows PowerShell 命令

format-hex "testFile.dat"
观察)。读取文件后,nData = 0,readData 没有改变。

我在调用 fopen() 后检查过

if (fp = NULL)
,这不是问题。我尝试在读取部分的每一行之后调用
ferror(fp)
,它总是返回 0。我对参数
readData
&readData[0]
readData[0]
也没有运气(没有意义/)似乎分别是必要的,但我在一些例子中看到了这些变化)。 fread() 和 fwrite() 的“所需的支持操作系统子例程”是相同的,因此这也不是问题。

有什么建议吗?

c file-io embedded fread
1个回答
0
投票

在读取之前,请确保文件指针

fp
正确重置到文件的开头。写入后,文件指针位于文件末尾,因此
fread
从那里读取并找不到数据。在写入和读取操作之间使用
rewind(fp)
fseek(fp, Ø, SEEK_SET)
将文件指针重置到文件开头。这应该允许
fread
正确读取数据。

© www.soinside.com 2019 - 2024. All rights reserved.