0

我需要在二进制文件的中间进行一些操作(更改字符串值、布尔值或 int32)并将其他所有内容保持原样。如何在不处理每个二进制对象的情况下快速跳过不需要使用的项目并获得所需的内容(其中有很多而且速度很慢)?

4

2 回答 2

1

这完全取决于文件的结构。实际上,您是否可以更改值将取决于文件的结构 - 如果您需要进行更改以使文件更大或更小,您可能需要创建一个新文件,因为您可以'不仅仅是从文件中间插入或删除字节。

Stream.Position如果您的文件具有固定长度的记录格式,您可以通过查找(例如使用属性)跳到正确的位置。如果您的文件没有固定长度的格式,您可能需要完全处理所有内容。在每条记录都带有长度前缀的情况下,存在“中间”的可能性:您不需要实际处理所有内容,但您仍然需要阅读每条记录的标头以跳过它。

于 2012-10-30T07:00:45.813 回答
0

Stream中有一个Seek函数,或许,你可以直接Seek到你想改变的位置,然后用Write方法修改文件?但是,如果您需要在中间添加字节而不仅仅是替换它们,您可能会遇到问题——在这种情况下,您需要重写文件的其余部分(以抵消现有内容)。

于 2012-10-30T07:02:33.113 回答