2011-08-20 53 views
1

在編寫一些處理日誌和文件的代碼時,我發現了windows文件io中的一些令人困惑的行爲。有誰知道爲什麼這個測試會以「無法讀取文件」的信息失敗?爲什麼FileShare無法按預期工作?

[TestMethod] 
public void SouldAllowReads() 
{ 
    using (var file = File.Open(_path, FileMode.Create, FileAccess.Write, FileShare.Read)) 
    { 
     using (var file2 = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
     { 
      //works ok, doesn't throw 
     } 

     try 
     { 
      using (var file3 = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read)) 
      { 
       //fails 
      } 
     } 
     catch (IOException) 
     { 
      Assert.Fail("cannot read file"); 
     } 
    } 
} 

PS。 _path = Path.GetTempFileName();

編輯:

我還是選elevener回答是正確的,但有一件事困擾我的這個設計。 .NET方法(如File.ReadAllText(_path))會拋出異常,這種情況不應該發生。

例如,這剪斷我的測試也將失敗的斷言:

 try 
     { 
      string text = File.ReadAllText(_path); 
     } 
     catch (IOException) 
     { 
      Assert.Fail("cannot read file"); 
     } 
+0

最後一個片段在什麼情況下會給你IOexcpetion? –

+0

記錄了ReadAllText引發異常的事實。如果手術失敗,您希望/預期會發生什麼? –

回答

3

你有var文件=與FileAccess.Write,並在同一時間試圖打開VAR文件3 =開放與文件共享模式FileShare.Read這不允許併發寫入訪問。

相關問題