我有很多進程讀取存儲在網絡共享上的文件。最初我只能有一個進程讀取文件,其他所有人都會拋出異常。我執行下面的代碼來處理是:有多個進程讀取同一文件的正確方法?
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
這讓多個進程讀取同一個文件,但它似乎仍然有問題,因爲有時候多個進程仍然無法訪問該文件。然而,我可以稍後再回來,當文件沒有被使用,並打開它就好了。現在我有一些重試行爲,實施了迄今爲止的隨機延遲,似乎有所幫助。這樣做對我來說似乎有點古怪,那麼更好的方法是什麼?
這是奇怪的部分,我得到的異常根本不是來自文件IO,而是來自名爲CommStudio的庫。總之,我將文件轉儲到一個字符串,我稍微修改它,將其轉儲到內存流中,然後通過rs232上的ymodem將其發送出去。例外是告訴我遠程系統已經取消。獲取數據的設備報告存在傳輸錯誤,這通常意味着收到了不完整/空文件。
通常我會責怪圖書館這個,但它在桌面測試和當只有一個進程訪問文件時完美地工作。唯一真正似乎一致的是,當多個進程訪問文件時,它很可能會失敗。
鎖定網絡共享可以是皮塔餅。你能告訴你正在使用哪些網絡共享(windows版本,unix?)以及你得到了什麼異常? – stmax 2010-02-25 23:24:55
客戶端使用的是XP,服務器是Windows Server,我認爲是2008,但並不完全確定。我發佈了關於異常的編輯。 – MGSoto 2010-02-25 23:30:56
你總是閱讀相同的文件嗎?您可以嘗試在讀取文件後檢查是否正確讀取校驗和(請參見類SHA1)。如果校驗和正確,則知道錯誤來自設備,而不是從網絡共享中讀取。 – stmax 2010-02-25 23:49:45