2012-05-05 32 views
0

我已經在visual studio 2010中編寫了一個winform應用程序。在其中一種形式中,用戶可以瀏覽本地系統並選擇一個圖像,因此應用程序將複製該圖像(使用File.Copy()方法)到其文件夾。 當用戶想要刪除圖像(File.Delete()方法),我收到這樣一個錯誤的問題是:因爲它是由另一個進程使用使用File.Delete()方法刪除文件時出錯

不能刪除這個文件。

我不知道這個錯誤說了什麼,因爲我不使用其他進程中的圖像文件。

+0

請問您可以發佈您使用的代碼嗎? – 3aw5TZetdf

+0

您可以使用[進程資源管理器](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)查找具有該句柄的進程。我的猜測是,你忘記了'.Close()'的某處,但這會證實它。 –

+1

下載進程監視器:它可以準確顯示使用該文件的進程(s):http://technet.microsoft.com/en-us/sysinternals/bb896645我打賭你無意中用自己的winform應用程序打開它;) – paulsm4

回答

-1

什麼康拉德建議同意,但也有邊緣的情況下的Process Explorer可能不可靠,或者你可以嘗試Unlocker

+0

推薦Unlocker是最糟糕的建議:http://stackoverflow.com/a/2611885/17034 –

0

正在發生的事情是,當我們從C#代碼拷貝一個文件,並將其粘貼,甚至之後該程序維護鏈接/信息到原始/複製文件。這不會發生在未被程序複製的文件或文件夾中已存在的文件中。

另一種方法是啓動copy shell/dos命令。要做到這一點的方法是存在於DOS這個article

拷貝命令就像

副本originalfilenamewithpath destinationfilenamewithpath。

要了解有關複製命令的更多信息,請轉到dos並寫入copy /?並按Enter鍵。

3

無法刪除此文件,因爲它被另一個進程使用。

的信息是不是非常有幫助的程序員,因爲當它發生在你開發代碼,其他的過程幾乎總是過程。

這很可能發生在圖像文件中,從圖像文件創建圖像或位圖對象將置於文件上。因爲GDI +在文件內容上創建了一個內存映射視圖,所以創建了該鎖,這是一種強大的優化,可將位圖數據保留在頁面文件之外。在大型圖像上很重要,它們可以包含許多兆像素的像素數據。

該鎖保持不變,直到您在代碼中顯式調用其Dispose()方法。因此,請確保在嘗試保存圖像之前完成此操作。在極少數情況下,您可能需要創建映像的副本以允許您處理原始文件,請使用帶有Image參數的Bitmap()構造函數重載。

+0

非常感謝,我認爲這是我的解決方案,我會測試它並告訴你結果。 –

相關問題