C# 用C语言从文件中收集二进制数据,编辑或添加数据,而不必再次写入整个文件

C# 用C语言从文件中收集二进制数据,编辑或添加数据,而不必再次写入整个文件,c#,data-structures,format,binaryreader,C#,Data Structures,Format,Binaryreader,我知道这听起来有点让人困惑。但我想知道是否有办法维护文件的结构并对其进行编辑,即使它在文件的某个部分添加数据或从某个位置编辑值 我现在所做的编辑二进制文件的工作是用C中的BinaryReader类对解析器进行编码,用reader.readSingle、readInt等读取特定结构 然后我用BinaryWriter写了完全相同的东西,这似乎有点低效,也许我会犯错误,在读写器之间产生差异,使格式不一致 有没有什么方法可以定义文件结构,并使用单一格式定义自动执行整个读写过程?或者能够打开一个文件,编辑

我知道这听起来有点让人困惑。但我想知道是否有办法维护文件的结构并对其进行编辑,即使它在文件的某个部分添加数据或从某个位置编辑值

我现在所做的编辑二进制文件的工作是用C中的BinaryReader类对解析器进行编码,用reader.readSingle、readInt等读取特定结构

然后我用BinaryWriter写了完全相同的东西,这似乎有点低效,也许我会犯错误,在读写器之间产生差异,使格式不一致

有没有什么方法可以定义文件结构,并使用单一格式定义自动执行整个读写过程?或者能够打开一个文件,编辑它的一些值,或者添加,因为它不是固定格式,读取它意味着一些for循环,例如,保存这些更改


我希望我能以一种清晰易懂的方式解释自己

如果您想将新数据插入二进制文件,您有三种选择:

将所有内容从该点向前向下移动一点,以便为新数据腾出空间。 以某种方式将现有数据标记为不再相关,即删除标志,并在文件末尾添加新数据。 用指向文件中另一个位置(通常是存储新数据的文件末尾)的指针替换现有数据。 第一种方法需要重写整个文件

第二种方法可以很好地工作,例如,如果它是一个记录文件,并且不依赖于文件中记录的顺序。如果文件具有嵌套记录等复杂结构,则会变得更加困难。它的缺点是在文件中留下大量空白空间

第三种方法与第二种类似,但如果使用随机访问而不是顺序访问,则效果很好。它仍然会浪费文件中的空间