如何在文件开头最快最有效地添加字节?基本上,我想打开一个文件,然后在开头添加一些字节。我考虑使用循环,但是考虑到所有要添加的字节都相同,我认为这不是必要的。
一种不是原子操作的方法(即,如果程序在中途崩溃,则数据可能处于不一致状态):
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
它也可以使用一些错误处理,但是你已经有了这个想法。
FileStream.Write
写入整个头块。无论如何,SO 的美妙之处在于即使是一个四年前有已接受答案的问题,您也可以选择今天添加自己的答案,并包括展示性能提升的基准结果。如果它不是冗余、过度或复杂的话,我甚至会点赞。 - Paul WallsFile.Replace
并使用null作为destinationBackupFileName)。请注意,您需要足够的空间来复制旧文件!