我想知道是否有可能獲得一個只讀的FileStream到一個鎖定的文件? 當我嘗試讀取鎖定的文件時,我現在得到一個異常。FileStream與鎖定的文件
using (FileStream stream = new FileStream("path", FileMode.Open))
謝謝!
我想知道是否有可能獲得一個只讀的FileStream到一個鎖定的文件? 當我嘗試讀取鎖定的文件時,我現在得到一個異常。FileStream與鎖定的文件
using (FileStream stream = new FileStream("path", FileMode.Open))
謝謝!
你應該嘗試另一個構造函數。他們記錄在MSDN。
這一個看起來像一個賭注:
FileStream Constructor (String, FileMode, FileAccess, FileShare)
的FileAccess
,它確定如何將文件可以通過FileStream對象進行訪問的常量。這獲得了FileStream對象的CanRead和CanWrite屬性。如果路徑指定了磁盤文件,則CanSeek爲true。
文件共享
,它確定如何將文件將由進程共享的常量。
Awsome回答!謝謝! – 2013-04-24 20:52:07
using (FileStream stream = new FileStream("path", FileMode.Open))
將使用默認值的文件共享說法,FileShare.Read。其中拒絕寫入文件的任何進程。如果另一個進程正在寫入文件,那麼這是行不通的,你不能否認已經獲得的權利。
您必須指定FileShare.ReadWrite。如果其他進程使用了FileShare.None,那麼這可能仍然不起作用,沒有解決方法。請注意,獲取正在寫入的文件的讀取訪問是麻煩的,您沒有可靠的文件結束指示。文件中的最後一條記錄或行可能只是部分寫入。
您可以簡單地解鎖文件並在其後讀取文件。 只需使用來自Sysinternals的Handle.exe,或使用命令行選項解鎖。 他們都可以解鎖文件,並且您可以輕鬆地從您的程序執行它們,而不用離開您的程序。 (但不要將它們用於Windows SAM文件,它不適用於SAM;)) 祝你好運!
我已經使用了以下工作,但應謹慎使用,因爲文件可以在您被另一個進程打開時進行修改。
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
您顯示的行不是試圖讀取鎖定的文件,而是您試圖打開文件的位置。你是否在其他地方創建這個文件?如果存在鎖定條件,您可能正在做一些事情來創建該條件。請在您列出的單行內顯示更多代碼。 – 2011-05-17 18:36:05