2011-02-22 71 views
0

我有一個運行在IIS 7.5中的ASP.NET,它在本地文件系統上創建文件,然後在創建和刪除之間執行一些邏輯之後嘗試刪除。我遇到了一種情況,雖然在刪除失敗的情況下,響應如「進程無法訪問文件'C:... \ Uploads \ c1fe593f-85de-4de1-b5d1-7239e1fc0648_Tulips.jpg'',因爲它正在被使用由另一個進程'。「該文件似乎被IIS鎖定,我無法刪除它。下面是創建和delete一個代碼示例:File.Create從IIS鎖定創建的文件

// File.WriteAllBytes(path, rawData); // this seems to leave the file open! 
using (var file = File.Create(path)) 
{ 
    file.Write(rawData, 0, rawData.Length); 
    file.Close(); // should close when it goes out of scope, but just to be safe 
} 

是否有一些特殊的選項,我需要傳遞到File.Create?我如何解決這個問題?

+0

原來我很笨。我忘了清理另外一個可以處理它的資源。我的錯。 – 2011-02-23 22:41:54

回答

0

File.WriteAllBytes(path, rawData);應該正常工作,假設您傳遞的路徑參數是唯一的,並且您沒有併發請求,一次寫入和另一次嘗試同時讀取。爲了確保這一點,如果可能發生這種情況,您可以使用ReaderWriterLockSlim來同步訪問。還要確保沒有可能泄漏文件句柄的代碼的其他部分。

看看SysInternals Process Explorer,它可以讓你知道這個文件句柄泄漏的確切位置。