在我的应用程序中,我必须复制然后从存储卡中删除图像文件,当一些卡无意中使用“锁定”开关将其转为只读时,问题就出现了。
尝试删除这些文件时,我想记录删除失败但在我选择之前不显示任何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
这在debuging工作正常,即它试图删除文件,如果没有捕获错误,我可以将其作为nessecary处理,但是当我构建并运行应用程序时,我收到一条错误消息,告诉我该文件不能删除。
要测试此代码,您需要一个可以物理设置为只读的驱动器(USB存储钥匙,SD卡),并尝试在调试时和构建后删除其中的文件。
为什么相同的代码运行方式不同,如何停止多余的错误消息?
答案 0 :(得分: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
答案 1 :(得分:-1)
不是将其包装在try / catch块中,而是在尝试执行删除之前测试文件是否存在:
Dim strFilePath as String = "K:\BYZTCSQ_0050.JPG"
If File.Exists(strFilePath) Then
System.IO.File.Delete(strFilePath)
End If