在文件开头添加字节的最快最有效的方法是什么?基本上,我想打开一个文件然后添加一些字节。我想过使用一个循环,但考虑到前置的所有字节是相同的,我认为没有必要。
答案 0 :(得分:9)
一种非原子文件的方法(也就是说,如果程序在中间死亡,数据可能会处于不一致状态):
ReadBytes
)完成,而不是一次一个字节 - 请参阅best way to copy between streams以获取示例。然而,这种方法也可能使文件系统预读方案混淆,并且需要搜索/随机文件访问。由于存在这些问题,如果设备上的空间绝对溢价,我只能诚实地推荐它。
另一种 atomic 文件的方法(如果程序在任何阶段死亡,没有数据丢失并且可以恢复该过程):
ReadBytes
) - 在这种情况下,之前链接的SO question应“按原样运行”。“缺点”是它需要一个临时文件。
快乐的编码。
答案 1 :(得分:4)
如果你真的需要前置,最“安全”的方式通常是将新文件写入你的字节,将这个新文件写入旧文件并最终交换文件(例如使用{{1}并使用null作为destinationBackupFileName。)。请注意,您需要足够的空间来复制旧文件!
答案 2 :(得分:3)
这是我个人能想到的最简洁的方式,但不会像你想要的那样避免循环:
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
它也可以使用一些错误处理,但你明白了。
答案 3 :(得分:0)
我能想到的最简单的方法是创建一个字节数组,添加你的“prepend”字节,然后将你想要使用的文件转换成另一个字节数组并将它们合并在一起!