2009-06-20 92 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); 
}