2011-03-31 67 views
0

我有一個WPF應用程序,它打開並編輯XML文件。目前,該應用可以多次啓動,並且多個實例可以打開相同的文件。我需要鎖定這些文件,當打開文件時,它不會讓應用程序的另一個實例打開文件。我曾嘗試在打開文件時使用FileShare.None屬性以及FileStream.Lock(),但由於某些原因,這些功能無法阻止單獨的應用程序實例打開它。保留在WPF應用程序中打開文件的多個副本

編輯:相關代碼

try 
{ 
    FileStream iStream = File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
    iStream.Lock(0, iStream.Length); 

    // DO STUFF WITH FILE HERE 
} 
catch (System.IO.IOException ioException) 
{ 
    // Raise exception to higher level, where application will terminate. 
    throw (ioException); 
} 
+0

發佈您的相關代碼,它會使得獲得幫助變得更容易。 – Jon 2011-03-31 02:07:14

+0

設置'FileShare.None'應該就夠了。你不需要調用'Lock()'。你能發佈一個更小,更完整的例子來重現問題嗎? – 2011-03-31 02:31:58

回答

0

你需要保持文件的打開你的那一刻起「編輯」,它所有的時間,你開始編輯,直到關閉(假設你有你的應用程序的每個實例單獨的進程)。

您的代碼看起來像是在方法中打開文件,並且可能通過使用短文件操作推薦的「使用」或讓GC關閉它來關閉它。因此,您鎖定了一段時間的文件,但很快就會釋放,以便其他實例能夠再次打開它。

請注意,如果您的應用程序實現某種單實例方法,則此鎖定可能不夠,因爲所有打開的操作都將從相同的進程執行。

+0

我知道一個事實,我沒有明確地關閉文件。然而,正如你所說,這可能是GC爲我關閉它。我該如何去阻止GC關閉它? – s73v3r 2011-03-31 02:45:57

+1

沒關係。我將FileStream對象的作用域移到了對象中,而不是僅僅在方法中聲明它。 – s73v3r 2011-03-31 02:55:39