【发布时间】:2016-11-09 17:17:48
【问题描述】:
我有一个编译 XML 文件的长时间运行的 REST API 方法。用户发出请求以启动此编译,创建基本文件,然后为用户提供一个唯一 ID,用于查询进度。
当被调用时,进度读取方法以只读访问打开文件,实例化一个XDocument对象并计算其中的元素数量。
填充 XML 文件的代码被访问
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
{
var xmlDoc = XDocument.Load(fs);
foreach (...)
{
// add the element to xmlDoc
xmlDoc.Save(filePath);
}
}
以及读取文件以计算元素数量的代码
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var xmlDoc = XDocument.Load(fs);
// count elements
}
但是,在 populating 方法中,xmlDoc.Save(filePath);
该进程无法访问文件“...”,因为它正被另一个进程使用。
据我了解,使用 FileShare.Read 打开 FileStream 允许另一个进程以只读访问权限打开文件(我相信这种情况正在发生),同样在读取/计数方法中使用 FileShare.ReadWrite 将允许填充进程以使用写访问权限打开文件。
为什么上面的代码不允许两个进程都按照我的预期去做?
【问题讨论】:
标签: c# .net xml read-write file-access