将数据结构写入文件

时间:2013-10-30 12:27:44

标签: c

我知道以下方法可能无法移植,但这正是我现在想要找到的。 想象一下,我有一些数据结构

struct student
{
    char name[20];
    int age;
} x;

现在我想把它写成这样的文件:

fwrite(&x, sizeof(student), 1, filePointer);

同样阅读:

fread(voidPointer, sizeof(student), 1, filePointer);
// Now possibly do a memcpy
memcpy(studentObjectPointer, voidPointer, sizeof(student));

我的问题是:说我不想将此文件复制到另一台计算机,我将从创建此文件的同一台计算机上读取它。 可移植性(字节顺序,打包数据结构)问题是否仍适用于上述方法?或者它会正常工作?

2 个答案:

答案 0 :(得分:1)

如果文件将被复制到其他计算机上,则必须构建自己的序列化程序解串器。你给它的结构非常简单。

您必须定义在编写数字时采用哪种字节顺序(此处为int age)。 在这里,你可以像这样处理:

  1. 以二进制模式打开文件
  2. 写出name字符串
  3. 的20个字节
  4. age写入 CHOSEN 字节序(big endian)
  5. 在阅读它时,您肯定必须将Big-Endianness转换为机器的本地字节顺序。

    还有一个问题:如果两台机器之间的sizeof (int)不一样。在这种情况下,事情变得更加恶毒,我认为上述情况还不够。 如果您确实需要在各种计算机上移植,请考虑使用#include <stdint.h>中定义的特定长度类型,例如int32_t

答案 1 :(得分:0)

请记住,我们生活在一个四维世界中。你说,保存的文件不会在x,y和z轴上移动,它将在同一台计算机上使用。但你没有提到第四个维度,时间。如果结构发生变化,它将失败。

至少,您应该在结构中放置一个签名字段。在write()之前用常量值填充它,在read()之后立即检查它,并在修改结构时更改常量值。