在 C# 中从文件中收集二进制数据并编辑或添加数据而无需再次写入整个文件
Gathering binary data from a file in C# and editing or adding data without writing the whole file again
我知道这听起来有点令人困惑。但我想知道是否有一种方法可以维护文件的结构并对其进行编辑,即使它是在文件的某些部分添加数据或从某个位置编辑值。
我现在编辑二进制文件所做的是使用 BinaryReader class(在 C# 中)对解析器进行编码,使用 reader.readSingle、readInt 等读取特定结构。
然后我用 BinaryWriter 写了完全相同的东西,这看起来有点低效,也许我会犯错误并在 reader 和 writer 之间造成差异,使格式不一致。
有什么方法可以定义文件结构并自动完成整个过程以使用单一格式定义进行读写?或者能够打开一个文件,编辑它的一些值,(或者添加,因为它不是固定格式,例如读取它意味着一些 for 循环),并保存这些更改?
我希望我的解释是通俗易懂的
如果要将新数据插入二进制文件,有以下三种选择:
- 将所有内容从该点向前移动一点,以便为新数据创建 space。
- 以某种方式将现有数据标记为不再相关(即删除标志),并在文件末尾添加新数据。
- 用指向文件中存储新数据的另一个位置(通常是文件末尾)的指针替换现有数据。
第一种方法需要重写整个文件。
例如,如果它是一个记录文件,并且您不依赖文件中记录的顺序,则第二种方法可以很好地工作。如果文件具有嵌套记录等复杂结构,则变得更加困难。它的缺点是会在文件中留下很多空space。
第三种方法与第二种方法类似,但如果您使用的是随机访问而不是顺序访问,则效果很好。它最终还是浪费了文件中的 space。
我知道这听起来有点令人困惑。但我想知道是否有一种方法可以维护文件的结构并对其进行编辑,即使它是在文件的某些部分添加数据或从某个位置编辑值。
我现在编辑二进制文件所做的是使用 BinaryReader class(在 C# 中)对解析器进行编码,使用 reader.readSingle、readInt 等读取特定结构。
然后我用 BinaryWriter 写了完全相同的东西,这看起来有点低效,也许我会犯错误并在 reader 和 writer 之间造成差异,使格式不一致。
有什么方法可以定义文件结构并自动完成整个过程以使用单一格式定义进行读写?或者能够打开一个文件,编辑它的一些值,(或者添加,因为它不是固定格式,例如读取它意味着一些 for 循环),并保存这些更改?
我希望我的解释是通俗易懂的
如果要将新数据插入二进制文件,有以下三种选择:
- 将所有内容从该点向前移动一点,以便为新数据创建 space。
- 以某种方式将现有数据标记为不再相关(即删除标志),并在文件末尾添加新数据。
- 用指向文件中存储新数据的另一个位置(通常是文件末尾)的指针替换现有数据。
第一种方法需要重写整个文件。
例如,如果它是一个记录文件,并且您不依赖文件中记录的顺序,则第二种方法可以很好地工作。如果文件具有嵌套记录等复杂结构,则变得更加困难。它的缺点是会在文件中留下很多空space。
第三种方法与第二种方法类似,但如果您使用的是随机访问而不是顺序访问,则效果很好。它最终还是浪费了文件中的 space。