所以我有这个WinForms EXE(VS2010),可以读取和写入这样的XML文件:
// read
FileStream dbXmlFileStream = File.Open(path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
myDataSet.ReadXml(dbXmlFileStream);
dbXmlFileStream.Close();
// write
myDataSet.AcceptChanges();
StreamWriter xmlSW = new StreamWriter(path);
myDataSet.WriteXml(xmlSW, XmlWriteMode.IgnoreSchema);
xmlSW.Close();
XML文件位于网络驱动器上,并由同一EXE的多个实例共享(也在同一网络路径上)。因此,每个用户的计算机上都有一个指向同一EXE的快捷方式。
首先访问EXE("第一个"与第一个运行的EXE实例一样)应该获得对XML的独占写访问权。后续的EXE实例应该能够读取(即在打开EXE时不抛出任何错误),但在尝试通过其EXE实例保存到相同的XML时会出现锁定错误。
使用我的代码,当多个用户读取或写入文件时,不会抛出任何异常。但是,它具有误导性,因为在所有这些都试图同时保存某些内容的情况下,只有最近的保存在磁盘上仍然存在。
如何消除歧义并实际捕获任何后续用户的写锁定异常?
我在File.Open中尝试了FileAccess和FileShare枚举的不同变体而没有运气。