将特定记录添加到二进制文件c ++

时间:2013-01-16 18:13:53

标签: c++

假设我有一个所有记录工作者的二进制文件和文本文件。 默认的总月份小时数均设置为0。 如何实际访问二进制文件中的特定月份并将其更改为所需的值?

这是文本文件格式

ID  Name   J F M
 1  Jane   0 0 0
 2  Mark   0 0 0
 3  Kelvin 0 0 0

ID  Name   J F M
 1  Jane   0 0 25
 2  Mark   0 0 30
 3  Kelvin 0 0 40

25实际上是3月份的工作小时数。

2 个答案:

答案 0 :(得分:3)

我认为这里的第一个问题是你所说的“二元”。你是字面上显示文件的格式?换句话说,在输入时,字符是'0'还是'\ 0'?完成后,您是否希望文件包含两位数“3”和“0”或单个字符“\ 25”,“\ 30”或“\ 40”?

如果你正在处理每个记录中已知偏移量的单个字符以进行输入,并希望用结果替换单个字符,那么事情就很简单:在文件中寻找正确的偏移量,写一个字节,寻找下一个偏移量,并继续“直到你更新了所有记录。

如果输入文件包含字符串,那么当你更新它的长度(可能)会改变时,你几乎要坚持读取数据,在内存中修改数据,然后将新数据写回(通常到一个新文件)。这也很简单,但如果文件很大,可能会很慢。

如果你是在一个真实的节目中这样做的话,我会三思而后行。我会考虑使用像SQLite之类的东西来处理数据。这不仅可以让您简化代码,还可以为您的客户提供更好的生活。它使用known/documented file format,因此其他工具可以处理数据,执行备份等。它支持事务,日志记录,回滚等。简而言之,它们获得了强大的解决方案,而不是另一个脆弱的问题。

答案 1 :(得分:1)

文件是字节流。您可以使用fopen fread fwrite的c系列函数来访问文件。或者通过c ++ iostream操作。在每种情况下,您都需要通过了解其位置然后读取和写入该记录来查找记录。如果记录的大小不固定,则必须处理移动所有后续记录。