2011-07-05 17 views
0

我有一個staging目錄,如果它在我的腳本中使用,我想要清理。代碼很簡單:Directory.Delete遞歸隨機失敗,說「目錄不空」

if (Directory.Exists(_stagingDir) && 
    Directory.EnumerateFileSystemEntries(_stagingDir).Any()) 
{ 
    Directory.Delete(_stagingDir, true); 
} 

有時候,IO異常會導致「目錄不爲空」。如果我遞歸刪除裏面的所有項目(這是true應該在那個函數中做什麼),不應該這樣嗎?如果我將腳本恢復幾行並再次運行,它可以正常工作。

我唯一的猜測是EnumerateFileSystemEntries正在鎖定一個文件,但我想我會得到一個很不同的例外(「訪問被拒絕」或「文件鎖定」或其他)。

回答

1

爲什麼打擾電話EnumerateFileSystemEntries呢?如果這是你的問題的原因,那麼就簡化爲:

if (Directory.Exists(_stagingDir)) 
{ 
    Directory.Delete(_stagingDir, true); 
} 

我懷疑你收到此錯誤的原因是,EnumerateFileSystemEntries返回的枚舉是沒有得到通過調用Delete()時間佈置,這意味着它對文件系統條目的句柄仍然是打開的。你可能重寫這個與using解決這個問題,但真的你最好完全刪除多餘的電話,如上所示。

+0

呃...不知道爲什麼這不會發生在我身上。謝謝! –