簡體   English   中英

創建然后刪除文件導致IOException

[英]Creating Then Deleting File Causes IOException

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

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

如果“某事”是一個只需要很短時間的進程,File.Delete將拋出IOException(另一個進程正在使用該文件)。 根據另一個SO帖子: 無法刪除Directory.Delete(path,true)的目錄 ,調用Thread.Sleep(0)應該允許前一個進程完成。 然而,即使有

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

仍然會拋出相同的IOException。

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

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

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

請注意,此代碼完全按照MSDN文檔中的建議...

File.Create返回一個FileStream,它表示該文件的打開句柄。 將該調用的結果包含在using-block中以確定性地關閉句柄。

另請注意:如果您不想在文件中寫入任何內容,可以通過兩種方式避免“使用”:

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

在情況(2)中,避免使用是安全的,因為在創建和處理它之間沒有做任何可能引發異常的事情。

File.Create返回一個FileStream,它是該文件的打開句柄。 請改用:

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

File.Delete("textfile.txt");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM