2009-11-11 92 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