C#将字节前置到文件的开头?

ray*_*ran 3 c# byte file insert prepend

在文件开头添加字节的最快和最有效的方法是什么?基本上,我想打开一个文件然后添加一些字节.我想过使用一个循环,但考虑到前置的所有字节是相同的,我认为没有必要.

小智 9

一种不是文件原子的方法(也就是说,如果程序在中间死亡,数据可能会处于不一致状态):

  1. 打开文件.
  2. 最后开始,将字节向后移动额外的大小差异.这应该在块(例如ReadBytes)中完成,而不是一次一个字节 - 请参阅流之间复制的最佳方法.
  3. 在文件开头填写新数据.

然而,这种方法也可能使文件系统预读方案混淆,并且需要搜索/随机文件访问.由于这些问题,我只能诚实地推荐它,如果设备上的空间绝对溢价.

另一种与文件原子相关的方法(如果程序在任何阶段死亡,则不会丢失任何数据并且可以恢复该进程):

  1. 打开旧文件.
  2. 创建一个新文件.
  3. 填写新文件中的数据.
  4. 将数据从旧文件移动到新文件(再次ReadBytes) - 在这种情况下,先前链接的SO问题应该"按原样工作".
  5. 删除旧文件并将新文件重命名为旧文件.

"缺点"是它需要一个临时文件.

快乐的编码.