2009-06-20 79 views
1

目前,我有一个读取XML文件的C#应用​​程序。但是如果这个XML文件是用word打开的,然后我的应用程序读取同一个XML文件,那么我会得到一个IO异常。我需要做的就是读取文件。这是一个小的代码片段;无法在C#中读取Word中打开的XML文件

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

我试过更改为FileShare.Read,但它不起作用。 – arc1880 2009-06-20 00:49:13

回答

1

Word肯定会锁定写入文件,这将阻止您的FileStream打开。您正在请求ReadWrite访问,这将失败。

我相信你可以打开它进行阅读,虽然 - 只是改变你的线路:

using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) 

注意FileShare.Read与FileShare.ReadWrite。我不相信Word会打开文件进行独占访问 - 但它确实锁定了文字。

+0

我试过这个,我得到了同样的例外。 – arc1880 2009-06-20 00:47:03

0

如果单词已完全打开文件,那么您无法执行任何操作,我认为这是事实。

捕捉异常并通知您的用户,他可能需要结束Word以使您的应用程序正常工作。

编辑

字不打开该文件专门 - 确保你打开文件进行读取onky - 查看其它评论者的代码。

0

我为XmlSerializer.Deserialize()创建了一个基于MSDN Docs的快速WinForms应用程序。使用和你一样的FileStream参数,我没有问题打开文件,即使它已经在Word中打开。你认为'filePath'的值可能是不正确的,比如尝试在Object_Load()中添加如下内容:

if (!File.Exists(filePath)) 
{ 
    throw new FileNotFoundException("File does not exist", filePath); 
}