質問: fs.Read(buf, 0, Math.Min(512, remain)); fs.Dispose(); Console.ReadKey();
回答: FileStreamのPositionが戻ってないから、思っている場所と異なる場所に書いているだけではないでしょうか。 だから、512Byte読み込んで、書き込みが513Byte目からとなっている形だと思います。 FileStream.Writeのoffsetはファイルの書き込み位置ではなくて、第1引数のバイト配列のどこから書き込むかの指定です。 書き込む前にPositionを戻すなりしてやればよろしいかと