1

次のように FileStream を開いています。

FileInfo file = new FileInfo(@"C:\Project.xml");
FileStream stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
XmlDocument document = new XmlDocument();
document.Load(stream);

プロジェクト ファイルが読み込まれると、ストリームが開かれます。ここで、変更が保存されたときにその内容を上書きできるようにする必要があります。この時点で、他のアプリ/ユーザーが変更を加えるのを防ぐために開いたままにしておく FileStream オブジェクトへの参照があります。

私が理解していないのは、書き込みメソッドがどのように機能するかです。前のデータと新しいデータのサイズが異なる場合があります。したがって、次のコードは意味がありません。

stream.Position = 0;
document.Save(stream);
stream.Close();

ストリームを閉じて再度開かずにコンテンツを上書きするにはどうすればよいですか? それは非論理的なようですが、そうであれば、ストリームを閉じてから再度開くまでの短い時間に、ファイルが他の何かによってロックされないようにするにはどうすればよいですか?

4

1 に答える 1

3

新しいドキュメントが古いドキュメントよりも長い場合、ファイル (およびストリーム) は自動的に拡張されます。

そうでない場合は、 を呼び出してファイルを切り詰めることができますstream.SetLength()。これまでに書き込まれたバイト数を示す
に設定します。stream.Position

于 2013-08-09T00:15:47.803 に答える