我正在寻找一种有效的方法来访问不同位置的大型二进制文件,而无需读写整个文件。
该文件将由非常多的行组成,每行包含固定长度的数据和不同长度的数据,例如:
<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()
到正确的行/位置进行有效读/写而不检查每行的结尾?数据库中是否存在类似的问题?
答案 0 :(得分:1)
我的目标是跳转到特定的ID并用新的覆盖记录 数据
您需要至少遍历整个文件一次才能执行此操作。由于您的数据似乎标有map<id,position_in_file>
,因此您可以创建seekg(position_in_file)
,然后通过git reset HEAD~
将该地图用于直接跳转。