我已經在visual studio 2010中編寫了一個winform應用程序。在其中一種形式中,用戶可以瀏覽本地系統並選擇一個圖像,因此應用程序將複製該圖像(使用File.Copy()方法)到其文件夾。 當用戶想要刪除圖像(File.Delete()方法),我收到這樣一個錯誤的問題是:因爲它是由另一個進程使用使用File.Delete()方法刪除文件時出錯
不能刪除這個文件。
我不知道這個錯誤說了什麼,因爲我不使用其他進程中的圖像文件。
我已經在visual studio 2010中編寫了一個winform應用程序。在其中一種形式中,用戶可以瀏覽本地系統並選擇一個圖像,因此應用程序將複製該圖像(使用File.Copy()方法)到其文件夾。 當用戶想要刪除圖像(File.Delete()方法),我收到這樣一個錯誤的問題是:因爲它是由另一個進程使用使用File.Delete()方法刪除文件時出錯
不能刪除這個文件。
我不知道這個錯誤說了什麼,因爲我不使用其他進程中的圖像文件。
什麼康拉德建議同意,但也有邊緣的情況下的Process Explorer可能不可靠,或者你可以嘗試Unlocker
推薦Unlocker是最糟糕的建議:http://stackoverflow.com/a/2611885/17034 –
正在發生的事情是,當我們從C#代碼拷貝一個文件,並將其粘貼,甚至之後該程序維護鏈接/信息到原始/複製文件。這不會發生在未被程序複製的文件或文件夾中已存在的文件中。
另一種方法是啓動copy shell/dos命令。要做到這一點的方法是存在於DOS這個article
拷貝命令就像
副本originalfilenamewithpath destinationfilenamewithpath。
要了解有關複製命令的更多信息,請轉到dos並寫入copy /?
並按Enter鍵。
無法刪除此文件,因爲它被另一個進程使用。
的信息是不是非常有幫助的程序員,因爲當它發生在你開發代碼,其他的過程幾乎總是您過程。
這很可能發生在圖像文件中,從圖像文件創建圖像或位圖對象將鎖置於文件上。因爲GDI +在文件內容上創建了一個內存映射視圖,所以創建了該鎖,這是一種強大的優化,可將位圖數據保留在頁面文件之外。在大型圖像上很重要,它們可以包含許多兆像素的像素數據。
該鎖保持不變,直到您在代碼中顯式調用其Dispose()方法。因此,請確保在嘗試保存圖像之前完成此操作。在極少數情況下,您可能需要創建映像的副本以允許您處理原始文件,請使用帶有Image參數的Bitmap()構造函數重載。
非常感謝,我認爲這是我的解決方案,我會測試它並告訴你結果。 –
請問您可以發佈您使用的代碼嗎? – 3aw5TZetdf
您可以使用[進程資源管理器](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)查找具有該句柄的進程。我的猜測是,你忘記了'.Close()'的某處,但這會證實它。 –
下載進程監視器:它可以準確顯示使用該文件的進程(s):http://technet.microsoft.com/en-us/sysinternals/bb896645我打賭你無意中用自己的winform應用程序打開它;) – paulsm4