2016-01-24 36 views
0

我做了這個小程序,演示了我的問題。它創建該文件,然後嘗試在相同的地址打開它。當它嘗試打開文件時,會引發路徑上的IOException共享衝突。爲什麼會發生?我可以看到該文件正在創建。C#創建和打開文件隔離拋出IOException

using System; 
using System.IO; 

namespace FileTestProject 
{ 
class MainClass 
{ 
    private static string address = "/Users/jamessullivan/Desktop/testFile.dat"; 

    public static void Main() 
    { 
     File.Create(address); 
     FileStream file = File.Open(address, FileMode.Open); 
    } 
} 
} 

回答

1

你可以看到問題尋找到文檔。

雖然你的例子沒有意義,但下面是對問題的解釋。

Create.File(string)返回FileStream它包含稱爲文件句柄的非託管資源,因此您不能創建另一個FileStream哪個應該保持相同的句柄。

你應該在重用之後釋放資源。

這是一個簡單consept:

using(File.Create(address)) 
{} 

using(FileStream file = File.Open(address, FileMode.Open) 
{ 
} 
+1

爲什麼兩個步驟?只需使用File.Create一次。 – usr

+0

我的錯誤是沒有看到File.Create返回文件,它需要關閉,但保持打開狀態。使用關鍵字使用或存儲引用到變量中並調用file.Close()修復了問題。謝謝 – j76goatboy

+0

@usr,我剛纔提到'雖然你的例子沒有意義。但是,正如OP所說,「這個能夠證明我的問題的小程序」在真正的問題中可能是一個有意義的流程。 –