2009-11-11 97 views
2

在我的應用程序中,我必須複製,然後從存儲卡中刪除圖像文件,問題出現時,一些卡無意中使「鎖」開關使其轉爲只讀。刪除文件導致無法排除的錯誤

當試圖刪除這些文件時,我想記錄失敗刪除但不顯示任何UI消息,直到我選擇的時間。

這是我遇到的一些示例代碼。

Sub Main() 
    Try 
     System.IO.File.Delete("K:\BYZTCSQ_0050.JPG") 
    Catch ex As Exception 
     'Error would be logged here 
    End Try 
End Sub 

調試運行,即它試圖刪除文件時,該工作正常,如果沒有捕獲錯誤時,我可以proccess它作爲nessecary,但是當我建立並運行應用程序,我得到一個錯誤消息,告訴我,該文件不能被刪除。

要測試此代碼,您需要一個可以物理設置爲只讀的驅動器(USB存儲盤,SD卡),並嘗試在調試時和構建後刪除文件。

爲什麼相同的代碼會以不同的方式運行,我該如何停止多餘的錯誤消息?

+0

您使用的是哪個版本的框架?這聽起來像是一個bug,因爲這裏應該拋出一個異常 - 我想爲你的版本提交一個,如果它尚未出現的話。 – SqlRyan 2009-11-12 17:55:49

回答

1

您可以嘗試創建存儲卡上的文件。由於只有Microsoft知道(或不是)的原因,在受版權保護的驅動器上創建文件會引起Try塊中的錯誤情況,而刪除文件則不會。順便說一下,我得到了同樣奇怪的結果 - 在調試模式下捕獲刪除工作正常,但不是從.exe。

Imports System.IO 
... 
Try 
    fs = File.Create(drive & "\tmp.~tmp") 
Catch ex As Exception 
    copyprotected = true 
End Try 

if not copyprotected then 
    file.delete(drive & "\tmp.~tmp") 
    file.delete(the file you wanted to in the first place) 
end if 
+0

如此簡單,我多麼喜歡它謝謝 – 2009-11-12 15:53:29

+0

此行爲看起來不正確 - 是否存在連接問題? – SqlRyan 2009-11-12 17:59:48

-1

而是在try/catch塊包裹它,測試以查看該文件試圖執行刪除之前存在:

Dim strFilePath as String = "K:\BYZTCSQ_0050.JPG" 
If File.Exists(strFilePath) Then 
    System.IO.File.Delete(strFilePath) 
End If 
+0

這不是他遇到的問題。鎖開關使媒體只讀。 – 2009-11-11 18:28:46

+0

這是純粹的測試代碼,我正在明確引用我知道存在的文件。 – 2009-11-11 18:31:57

+0

該文件存在 - 他有問題將其從媒體中刪除 – SqlRyan 2009-11-12 15:47:08