如何从二进制数据文件中读取信息到C ++结构数组中

时间:2012-10-31 02:45:05

标签: c++ arrays structure

我是一名C ++初学者。我有一个结构数组,用于保存员工信息。 我可以将值放入结构中,将这些值写入二进制dat文件中 将值读回程序,以便可以显示到控制台。 这是我的问题。一旦我关闭程序,我就无法让文件将文件中的数据读回内存 - 而是读取“垃圾”。

我尝试了一些事情,然后在我的书中阅读:

  

注意:无法正确存储包含指针的结构   磁盘使用本节的技术。这是因为如果   结构在程序的后续运行中读入内存,它   不能保证所有程序变量都是相同的   记忆位置。

我很确定这是当我尝试使用以前存储的信息打开.dat文件并尝试将其读入结构数组时发生的事情。

我可以发送我的代码示例,如果这有助于澄清我的问题。 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

一般来说(因为我没有你的代码),你通常不应该只将结构或类的字节写入文件有两个原因:

  • 正如你的书所提到的,写一个指向磁盘的指针是没有意义的,因为你只是存储一个随机地址而不是那个地址的数据。您需要自己写出数据。

  • 尤其不应该尝试同时写一个struct / class fwrite(file, myStruct, sizeof(myStruct))。编译器有时会在结构中的变量之间放置空字节,以便让处理器更快地读取它们 - 这称为padding。使用不同的编译器或编译不同的计算机体系结构可能会以不同方式填充结构,因此在一台计算机上正确打开的文件可能无法在另一台计算机上正确打开。

有很多方法可以将数据写入文件,无论是二进制格式还是XML等人类可读格式。无论您选择使用哪种方法(每种方法都有优点和缺点),每种方法都需要逐一编写您需要保存的每一条数据,然后逐一阅读。像Java或C#这样的高级语言可以通过存储有关对象的元数据来自动执行此操作,但这需要更多的内存使用和更慢的程序执行。