2012-04-20 111 views
1

我有一個函數,它總是創建一個目錄並放入一些文件(圖像)。 當代碼第一次運行時,沒問題。第二次(總是),當我不得不刪除目錄時它會得到一個錯誤(因爲我想重新創建它以放入圖像)。錯誤是「進程無法訪問文件'...',因爲它正在被另一個進程使用」。訪問這個文件的唯一過程就是這個功能。 這就像功能「不離開」文件。錯誤:進程無法訪問文件'...',因爲它正在被另一個進程使用

我該如何解決這個問題?

下面的代碼的一部分:

String strPath = Environment.CurrentDirectory.ToString() + "\\sessionPDF"; 
if (Directory.Exists(strPath)) 
     Directory.Delete(strPath, true); //Here I get the error 
Directory.CreateDirectory(strPath); 
//Then I put the files in the directory 
+4

請出示使用該文件 – 2012-04-20 15:00:58

+0

我想太瞭解,因爲我有問題與.NET似乎抱着一種文件句柄,並防止其自身在同在未來使用它們的代碼運行該應用程序。 – siride 2012-04-20 15:02:14

+0

請使用標籤,而不是將C#添加到標題 – 2012-04-20 15:06:43

回答

2

如果你的代碼或其他進程正在服刑了圖像,它們將被鎖定的時間無限期量。如果它是IIS,它們在服務期間被鎖定很短時間。我不確定這一點,但是如果資源管理器正在爲圖像創建大拇指,它可能會鎖定這些文件。這可能是短暫的,但如果你的代碼和該進程發生衝突,這是一個競爭條件。

確保您完成後釋放鎖。如果類實現了IDisposable,包裝using語句圍繞它,如果你不這樣做,對象上進行大量工作:

using (var Bitmap = ... || var Stream = ... || var File = ...) { ... } 

...這將隨後關閉對象和文件不會被鎖定。

+0

使用語句解決了問題。你是對的。 問題是我使用: 位圖myBitmap =新位圖(path_of_the_image); 我在這樣的使用語句中插入這個變量: 使用(位圖myBitmap =新位圖(path_of_the_image)){...} 所有工作正常。謝謝。 – 2012-04-20 17:12:11

0

在這種情況下,唯一的澄清溶液是跟蹤誰是處理訪問目錄和修正錯誤,通過釋放訪問。

如果處理訪問的對象/資源是第三方,或者通過任何方式無法更改或訪問,那麼現在是修改體系結構,以不同方式處理IO訪問的時候了。

希望這會有所幫助。

+0

感謝您的通知。最後,我可以解決處理參考圖像的對象(位圖)。 – 2012-04-20 18:11:10

1

只是在這裏沒有看到轉儲文件的代碼,但如果您使用FileStreamsBitmap對象,我會仔細檢查以確保在運行第二個對象之前正確處理所有這些對象方法。

+0

是的,我沒有處理所有(位圖)對象。我使用語句解決。謝謝。 – 2012-04-20 17:58:16

0
  • 我所看到的情況下,一個病毒掃描將掃描新文件,防止被刪除的文件,雖然這是極不可能的。

  • 請確保所有IDisposable對象的.Dispose,並確保沒有任何東西將您的Environment.CurrentDirectory更改爲您要刪除的目錄。

+0

是的,那是問題所在。感謝您的支持。 – 2012-04-20 18:00:46

相關問題