2012-08-08 35 views
8

應用程序需要在目錄中創建文件,在目錄中執行某些操作,然後刪除文件。例如,下面的源代碼:創建然後刪除文件會導致IOException

File.Create("textfile.txt"); 
// Do something here 
File.Delete("textfile.txt"); 

如果「東西」是隻需要的時間非常短的量的過程中,將File.Delete拋出IOException(文件正在被另一個進程)。根據另一個SO帖子:Cannot delete directory with Directory.Delete(path, true),調用Thread.Sleep(0)應該允許先前的過程完成。但是,即使與

File.Create("textfile.txt"); 
// Do something here 
Thread.Sleep(0); 
File.Delete("textfile.txt"); 

仍然會拋出相同的IOException。

我得到的解決方案是一個while循環,試圖刪除該文件,直到它被刪除。但我想知道是否有更好的解決方案。

+1

感謝您提供非常快速的答案(並指出它在MSDN上,我現在確實感覺不太好)。要和@usr一起去,因爲他是第一個。但請接受+1作爲我的感謝。 – Jim 2012-08-08 10:58:22

回答

16

File.Create返回一個FileStream,表示該文件的打開句柄。將該調用的結果封裝在使用塊中以確定性地關閉句柄。

21

File.Create方法將創建一個文件流,您需要正確處理該文件流。我建議以下代碼:

using(FileStream fs = File.Create("textfile.txt")) 
{ 
    // Do something here. 
} 
File.Delete("textfile.txt"); 

注意,該代碼是完全一樣的MSDN文檔中建議...

3

File.Create返回一個FileStream這是一個打開的句柄到該文件。用這個代替:

using(FileStream fs = File.Create("textfile.txt")) 
{} 

File.Delete("textfile.txt"); 
4

另請注意:如果你不想寫什麼到文件,你可以避開「利用」兩種方式:

(1) File.WriteAllText("textfile.txt", string.Empty); 
(2) File.Create("textfile.txt").Dispose(); 

在情況(2)避免使用是安全的,因爲你沒有做任何事情可以在創建和處理它之間拋出異常。

相關問題