如何检查fwrite()是否在C中有效?

时间:2014-02-11 22:48:40

标签: c file struct io fread

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

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

读取数据很简单 - fread()是你的朋友。我会读它 全部成为适当大小的(void *)。

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

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

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

答案 3 :(得分:-1)

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

答案 4 :(得分:-1)

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