从C#中的文件中收集二进制数据并编辑或添加数据,而无需再次编写整个文件

时间:2017-01-23 03:45:33

标签: c# data-structures format binaryreader

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

我现在所做的编辑二进制文件的方法是使用BinaryReader类(在C#中)对解析器进行编码,使用reader.readSingle,readInt等读取某个结构。

然后我用BinaryWriter编写完全相同的东西,这似乎有点无用,也许我会犯错误并在读者和作者之间产生差异,使格式不一致。

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

我希望我以一种可以理解的方式解释自己

1 个答案:

答案 0 :(得分:1)

如果要将新数据插入二进制文件,则有三个选项:

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

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

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