如何快速保存大文件中的小变化?

时间:2017-05-22 17:00:24

标签: c++ performance file-io binaryfiles

我正在寻找一种有效的方法来访问不同位置的大型二进制文件,而无需读写整个文件。

该文件将由非常多的行组成,每行包含固定长度的数据和不同长度的数据,例如:

<id><type><some_atributes><just_few_bytes>\n
<id><type><some_atributes><block_holding_KB_of_data>\n
<id><type><some_atributes><some_other_bytes>\n
...

我的目标是跳转到特定ID并用新数据覆盖记录。

我在考虑seek()fwrite(),但问题是如何seek()到正确的行/位置进行有效读/写而不检查每行的结尾?数据库中是否存在类似的问题?

1 个答案:

答案 0 :(得分:1)

  

我的目标是跳转到特定的ID并用新的覆盖记录   数据

您需要至少遍历整个文件一次才能执行此操作。由于您的数据似乎标有map<id,position_in_file>,因此您可以创建seekg(position_in_file),然后通过git reset HEAD~将该地图用于直接跳转。