假设我有一个所有记录工作者的二进制文件和文本文件。 默认的总月份小时数均设置为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月份的工作小时数。
答案 0 :(得分:3)
我认为这里的第一个问题是你所说的“二元”。你是字面上显示文件的格式?换句话说,在输入时,字符是'0'还是'\ 0'?完成后,您是否希望文件包含两位数“3”和“0”或单个字符“\ 25”,“\ 30”或“\ 40”?
如果你正在处理每个记录中已知偏移量的单个字符以进行输入,并希望用结果替换单个字符,那么事情就很简单:在文件中寻找正确的偏移量,写一个字节,寻找下一个偏移量,并继续“直到你更新了所有记录。
如果输入文件包含字符串,那么当你更新它的长度(可能)会改变时,你几乎要坚持读取数据,在内存中修改数据,然后将新数据写回(通常到一个新文件)。这也很简单,但如果文件很大,可能会很慢。
如果你是在一个真实的节目中这样做的话,我会三思而后行。我会考虑使用像SQLite之类的东西来处理数据。这不仅可以让您简化代码,还可以为您的客户提供更好的生活。它使用known/documented file format,因此其他工具可以处理数据,执行备份等。它支持事务,日志记录,回滚等。简而言之,它们获得了强大的解决方案,而不是另一个脆弱的问题。
答案 1 :(得分:1)
文件是字节流。您可以使用fopen fread fwrite的c系列函数来访问文件。或者通过c ++ iostream操作。在每种情况下,您都需要通过了解其位置然后读取和写入该记录来查找记录。如果记录的大小不固定,则必须处理移动所有后续记录。