【问题标题】:How to check if fwrite() works in C?如何检查 fwrite() 是否在 C 中工作?
【发布时间】:2014-02-11 22:48:39
【问题描述】:

我正在尝试读取输入文件中 256 字节的任何数据,并将它们的信息构造成一个结构,然后将该结构写入我的输出文件。由于我不能简单地打开并读取输出文件,我想知道我应该怎么做才能确保我已成功地将结构写入输出文件?

【问题讨论】:

  • 您能发布一些代码来向我们展示您到目前为止所做的尝试吗?
  • 检查 fwrite() 返回值看起来是个不错的起点。
  • 如果您将结构按原样写入文件,请注意填充!
  • “既然我不能简单地打开并读取输出文件” - 为什么不呢?

标签: c file struct io fread


【解决方案1】:

检查来自fwrite的返回值-即阅读手册页http://www.cplusplus.com/reference/cstdio/fwrite/

【讨论】:

  • 你是在暗示返回值吗?但是即使我写了我想要的相同数量的元素,我怎么知道输出文件中的数据是正确的呢?
【解决方案2】:

您可以再次读取文件并将其转换为您的结构并检查它的值。

【讨论】:

  • 我应该如何投射?
  • 只需读取文件并使用 memcpy 将其内容复制到您的结构中: myobject obj; memcpy(&obj, file_buffer, read_byte_count);
【解决方案3】:

您有几个基本问​​题。首先,您需要验证数据 您已阅读是有效的。其次,构建了你的数据结构 在内存中,您需要将其写出到另一个文件中。第三,你想要 保证这已被正确写出 - 但你不说 为了验证输出文件的正确性,您可以做什么。

读取数据很容易 - fread() 是您的朋友。我会读它 全部放入适当大小的 (void *) 中。

我过去在类似的数据输入/数据输出用例中所做的是 包括一个简单的(取决于应用程序)校验和作为第一个元素 在您的输出数据结构中。使用 bcopy() 或 memcpy() 传输您的读入 数据到您的输出结构,然后计算数据的校验和 更新校验和字段。

最后,你 fwrite() 将所有数据写入输出文件,并检查返回 value - 写出的对象数。如果有错误(写的数字 低于预期),您需要检查 errno 并处理错误情况。 在我的手册副本 (Solaris 11.x) 中,错误代码可能用于 fwrite(3c) 是用于 fputc(3c) 的。

最后终于可以判断是否写入了足够的字节 通过立即比较来自 stat() 调用的 statbut 到输出文件 打开输出文件后,立即打开 fwrite() + fclose() 回来了。

【讨论】:

    【解决方案4】:

    如果您打开文件以读取写入,您还应该能够fseek 到开头(偏移量0)并从那里重新读取文件。这是假设您可以打开文件以一起读写。

    【讨论】:

      【解决方案5】:

      按照 chux 的建议检查返回码。在十六进制编辑器中打开输入和输出文件并比较前 256 个字节。 Emacs 有一个运行良好的。

      【讨论】:

      • 输入文件和输出文件不一样
      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      相关资源
      最近更新 更多