2011-07-13 107 views
4

我想通過c#訪問一個文件,它是通過一個不同的程序創建和處理的。
目前我通過Windows資源管理器將文件複製到不同的位置,然後與副本一起工作。由於副本很大,我寧願直接使用原始文件。有什麼辦法嗎?
正常的FileStream不允許任何共享訪問模式。我對這兩個程序都有控制權,所以如果需要的話,我也可以改變作者。C#訪問鎖定的文件

+3

你是什麼意思,FileStream不允許任何共享訪問模式?有構造函數重載,允許您指定:http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx –

+0

如果正在創建和處理文件的應用程序沒有以共享訪問方式打開它也將無法做到。 – Yuck

回答

4

您需要確保該程序執行寫入和讀出有正確的文件共享設置,所以你需要FileShare.Read傳遞到的FileStream構造函數的程序編寫:

new FileStream("C:/Users/phil/tmp.txt",FileMode.Create,FileAccess.Write,FileShare.Read) 

你也將要確保你有計劃,這只是閱讀它啓用FileShare.ReadWrite:

new FileStream("C:/Users/phil/tmp.txt",FileMode.Open,FileAccess.Read,FileShare.ReadWrite) 

這將導致的FileStream構造函數把正確的鎖文件本身。

你可以找到更多關於MSDN上的構造:http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx(也有那也需要文件共享參數的其他重載)

0

你可以使用我的圖書館從多個應用程序訪問文件。

您可以從的NuGet安裝:安裝,包裝Xabe.FileLock

如果你想了解它檢查 https://github.com/tomaszzmuda/Xabe.FileLock

ILock fileLock = new FileLock(file); 
if(fileLock.Acquire(TimeSpan.FromSeconds(15), true)) 
{ 
    using(fileLock) 
    { 
     // file operations here 
    } 
} 

fileLock.Acquire方法將返回true只有當可以鎖定文件的詳細信息專用於此對象。 但是上傳文件的app也必須在文件鎖中進行。 如果對象不可訪問,metod返回false。

所以如果你想使用它,你必須先安裝應用程序和鎖定文件包,然後再更改數據,然後立即釋放鎖定。