2011-01-13 45 views
45

我正在使用System.IO.File.Create創建文件。我不是用流式編寫器寫它,只是創建它。System.IO.File.Create鎖定文件

當應用程序嘗試打開新創建的文件時,前端出現服務器錯誤 - 該文件正在使用中。垃圾收集似乎隨之而來,幾分鐘後一切正常。

現在我知道如果我正在使用Streamwriter,我將不得不關閉它。這同樣適用於創建?

我讀過,打開一個流編寫器的文件,然後立即關閉它會解決這個問題,但它似乎凌亂。有一種更簡單的方法嗎?

+0

讓我們看看你的代碼 – Kev 2011-01-13 13:00:09

回答

64

File.Create返回FileStream。你應該像這樣使用它:

using (FileStream fs = File.Create(path)) 
{ 
    //you can use the filstream here to put stuff in the file if you want to 
} 
+1

我不得不從來沒有想過。 – Traubenfuchs 2016-07-04 19:14:46

11

創建文件會打開一個FileStream,因此鎖定它(File.Create返回FileStream)。

您必須關閉此流才能訪問該文件。這是最好用using語句來完成:

using(FileStream fs = File.Create(path)) 
{ 
} 
1

Create方法將返回一個文件句柄。在重新使用文件之前,文件句柄應該被關閉。請參閱MSDN文章File.Create Method (String)中的詳細信息。

總結:

通過這種方法創建的FileStream對象具有無的默認文件共享值;在原始文件句柄關閉之前,沒有其他進程或代碼可以訪問創建的文件。

8

使用File.Create時,返回FileStream。直到您關閉流或直到FileStream對象被丟棄(由垃圾收集器的終結者),它將保持打開並鎖定狀態。

FileStream實現IDisposable這樣你就可以做到以下幾點:

using(FileStream fs = File.Create(filename)) 
{ 
    // Do stuff like write to the file 
} 

using說法是「語法糖」,使編譯器生成的代碼,在功能上等同於:

FileStream fs = File.Create(filename) 
try 
{ 
    // Do stuff like write to the file 
} 
finally 
{ 
    fs.Dispose(); 
} 

Dispose方法在內部調用Close

1

我所用: System.IO.File.Create(sFullFileName);

以上.Create方法沒有關閉文件

我現在使用: System.IO.File.WriteAllText(sFullFileName, "Uploading");

此方法創建並關閉文件(注:我把字符串「上傳」在文件中,但我相信string.Empty也將工作。

80

試試這個:

System.IO.File.Create(FullFName).Close(); 
+1

這是完美的,當你只是想創建一個空白文件。 – TTT 2013-01-26 18:45:35