目前我有一个读取XML文件的C#应用程序。但是如果这个XML文件是用word打开的,然后我的应用程序读取相同的XML文件,那么我会得到IO异常。我需要做的就是阅读文件。这是一个小代码片段;
public Object Load()
{
try
{
using (FileStream fs = new FileStream(
filePath,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite)) // Also tried, FileShare.Read and gets the same exception
{
return ((FooObject) new XmlSerializer(typeof(FooObject))
.Deserialize(fs)) as Object;
}
}
catch (Exception ex)
{
LogException(ex);
return null;
}
}
答案 0 :(得分:1)
Word肯定会锁定文件以进行写入,这将阻止您的FileStream打开。您正在请求ReadWrite访问,这将失败。
我相信你可以打开它进行阅读 - 只需将你的行改为:
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
请注意FileShare.Read与FileShare.ReadWrite。我不相信word会打开文件进行独占访问 - 但它会锁定写入。
答案 1 :(得分:0)
如果word单独打开文件,你就无法做任何事情,我认为情况就是这样。
捕获异常并通知您的用户他可能需要结束Word以使您的应用程序正常工作。
修改强>
Word不会独占打开文件 - 请确保打开文件以阅读onky - 请查看其他评论者的代码。
答案 2 :(得分:0)
我为XmlSerializer.Deserialize()创建了一个基于MSDN Docs的快速WinForms应用程序。使用与您相同的FileStream参数,即使它已在Word中打开,我也没有打开文件的问题。你认为'filePath'的值可能是不正确的,即尝试向Object_Load()添加如下内容:
if (!File.Exists(filePath))
{
throw new FileNotFoundException("File does not exist", filePath);
}