一部のプロジェクトではファイルを上書きする必要がありますが、その間にユーザーが他のプログラムでこのファイルを編集する可能性があるため、実行時にストリームを頻繁に保持するのではなく、すべてのデータをバイト配列に保存します。プログラムを保存するとき、ファイル全体ではなく、編集した領域のみを保存する必要があります。そのためのルーチンを (非常に下手に) 書きましたが、遅いことが予想され、ここでパフォーマンスを改善する方法がわかりません。私は実際には配列全体をループしているだけで、見た目ほどスマートではありません。
public Boolean Patch(string path)
{
FileStream fs = new FileStream(path, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
BinaryWriter bw = new BinaryWriter(fs);
if (fs.Length != this.rawdata.Length)
throw new ArgumentException();
for (int i = 0; i < this.rawdata.Length; ++i )
{
if (br.ReadByte() != rawdata[i])
{
fs.Position--;
bw.Write(rawdata[i]);
}
}
fs.Close();
return true;
}