c#将字节前缀到文件的开头
本文关键字:文件 开头 前缀 字节 | 更新日期: 2023-09-27 18:07:30
在文件开头添加字节的最快和最有效的方法是什么?基本上,我想打开一个文件,然后向其中添加一些字节。我想过使用循环,但考虑到所有要前置的字节都是相同的,我认为没有必要。
一种非原子重写文件的方法(也就是说,如果程序中途终止,数据可能处于不一致状态):
- 从结尾开始,按额外的大小差异向后移动字节。这应该在块中完成(例如
ReadBytes
),而不是一次一个字节-查看流之间复制的最佳方法示例。 - 在文件开头填写新数据
另一种方法是原子重写文件(如果程序在任何阶段死亡,没有数据丢失,进程可以恢复):
- 打开旧文件
- 新建文件
- 填写新文件
- 将数据从旧文件移动到新文件(再次是
ReadBytes
) -在这种情况下,前面链接的SO问题应该"就像它一样工作"。 - 删除旧文件并将新文件重命名为旧文件
缺点是需要一个临时文件。
快乐编码。
这是我个人能想到的最简洁的方式,但并没有像你想的那样避免循环:
int numberOfBytes = 100;
byte newByte = 0x1;
using ( var newFile = new FileStream( @"C:'newfile.dat", FileMode.CreateNew, FileAccess.Write ) )
{
for ( var i = 0; i < numberOfBytes; i++ )
{
newFile.WriteByte( newByte );
}
using ( var oldFile = new FileStream( @"C:'oldfile.dat", FileMode.Open, FileAccess.Read ) )
{
oldFile.CopyTo(newFile);
}
}
// Rename and delete files, or whatever you want to do
它也可以使用一些错误处理,但是您应该明白。
如果你真的需要前置,最"安全"的方式通常是将你的字节写入一个新文件,将旧文件写入这个新文件,最后交换文件(例如使用File.Replace
并使用null作为destinationBackupFileName.)。请注意,您需要足够的空间来复制旧文件!
我能想到的最简单的方法是创建一个字节数组,添加"前置"字节,然后将你想要使用的文件转换为另一个字节数组并将它们合并在一起!