2013-07-23 24 views
1

在我的應用程序中,我爲管理員端每15秒創建一個XML文件。 爲了創建XML我已經使用XML構建器。我們如何在同一時間訪問讀取和寫入XML

File.WriteAllText("D:\\FE_Display.xml", StringBuilder.ToString()) 

我每隔15秒就會在前端網格中顯示的文件。該文件最小10memebrs在前端同時使用。下面的代碼用於前端。

Dim ds As New DataSet() 

ds.ReadXml("d://FE_Display.xml") 
Try 
    If ds.Tables(0).Rows.Count > 0 Then 
     Grid1.DataSource = ds.Tables(0) 
     Grid1.DataBind() 
    End If 
Catch ex As Exception 

End Try 

如果兩個事件(讀寫)發生在同一時間我收到以下錯誤

該進程無法訪問文件「FE_Display.xml」,因爲它正由另一個進程使用

+1

現在您知道數據庫存在的原因了。作爲一種解決方案,您可以使用線程或某種標誌來使用監視器同步訪問(輸入和退出) – mtzaldo

+0

爲什麼要放置C#標記?這是VB.NET的問題。 –

+0

我會用循環測試成功(或沒有遇到失敗)來包裝這兩組代碼。在重試循環中包含Application.DoEvents以減少重試期間CPU的壓力。最糟糕的情況下,你需要幾毫秒的時間衡量。 – rheitzman

回答

0

打開文件進行寫入時使用FileShare.ReadWrite選項。

允許隨後打開文件進行閱讀或寫作。如果未指定此標誌,則在文件關閉之前,打開文件進行讀取或寫入(通過此進程或其他進程)的任何請求都將失敗。但是,即使指定了此標誌,訪問該文件仍可能需要其他權限。

採取從這裏:

http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx

例如,當開口道:

var filestream = File.Open(fileName, 
          FileMode.Open, 
          FileAccess.Read, 
          FileShare.ReadWrite); 

那麼你的後續文件的讀取,而不錯誤打開。

2

文件通常是互斥的,除非您提供FileShare。你可以讀取一個文件保存在內存中,然後寫入它。

ReadingWriting在同一時間沒有意義(至少對於XML),因爲XML必須格式良好。當你在寫作和閱讀的同時,你會得到意想不到的結果。

最好的辦法是

  1. 打開文件,消耗它的關閉它。
  2. 打開文件,寫入文件。
+0

我可以知道如果文件是寫入打開模式,是否可以同時讀取? – Sree

+0

我同意這種做法,同時閱讀和寫作。我不知道爲什麼該文件每15秒寫入一次。 –

+0

是的,你可以但打開文件,你必須指定'FileShare.ReadWrite或FileShare.Read'至少 –