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 对象的引用,该对象保持打开状态以防止其他应用程序/用户对其进行更改。

我不明白的是 write 方法将如何工作。先前数据和新数据的大小可能不同。所以下面的代码没有意义。

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

如何在不关闭流并重新打开它的情况下覆盖内容?这似乎不合逻辑,如果是,我如何确保文件在关闭和重新打开流之间的短时间内不会被其他东西锁定?

4

1 回答 1

3

如果新文档比旧文档长,文件(和流)将自动扩展。

如果没有,您可以通过调用来截断文件stream.SetLength()
您可能希望将其设置为stream.Position,这表示到目前为止已写入的字节数。

于 2013-08-09T00:15:47.803 回答