2015-11-13 41 views
1

我寫了一個從其位置刪除文件的功能。代碼可以看作如下:文件刪除不起作用

if (File.Exists(strPath + "/FLV/" + flvvideoname)) 
{ 
    File.Delete(strPath + "/FLV/" + flvvideoname); 
} 

'strPath'是目錄的路徑。當代碼執行時,文件並不總是被刪除。反覆運行相同的代碼會刪除文件。當我解決此問題時,中斷點不會越過文件刪除行,也看不到任何錯誤。如果中斷點超過文件刪除行,這意味着該文件已被正確刪除。

如何解決此問題?

+0

你肯定有沒有訪問該文件的任何其他進程? –

+0

確保運行IIS進程的用戶有權修改此目錄。 –

+1

'刪除不會刪除爲正常I/O或存儲器映射的文件打開的文件。「# –

回答

1

創建文件的句柄有時可能無法釋放。嘗試撥打

GC.Collect(); 
GC.WaitForPendingFinalizers(); 

刪除之前。

也檢查出這個問題:Delete a file being used by another process

編輯:

或者到awoid調用GC.Collect的()(原因所指出的博阿斯Enker),你可能要等待在一個循環的文件 - like this

+1

不是一個好主意。 GC.Collect對整個運行時間有巨大的影響。也沒有解決問題,並使系統不太可預測 –

+0

@BoasEnkler我試過這種方法,它的工作。有沒有其他的選擇? –

+1

@AhmedMujtaba有一些骯髒,像使用Thread.Sleep(),但你不會這樣去。 –

0

我敢肯定,這個問題不在文件刪除。可能是當你從數據庫檢索文件名,或者動態設置一些變量時,你不是在第一次頁面加載時,而是在回發時。所以,如果你是動態獲取文件名,做下一步:

if (!IsPostBack){//function for retrieving data from database 

//your_variable = some_value; }