2009-11-11 7 views
2

Dans mon application, je dois copier puis supprimer des fichiers d'image des cartes mémoire, le problème survient lorsqu'une partie de la carte est verrouillée par inadvertance sur le bouton de verrouillage.La suppression d'un fichier provoque une erreur irrémédiable

Lorsque vous essayez de supprimer ces fichiers, je veux enregistrer l'échec de supprimer mais ne pas afficher les messages de l'interface utilisateur jusqu'à un moment de mon choix.

Voici un exemple de code avec lequel je rencontre des problèmes.

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

Cela fonctionne bien quand debug-à-dire qu'il essaie de supprimer le fichier et sinon l'erreur est pris et je peux Proccess comme nessecary, mais quand je Générez et exécutez l'application je reçois un message d'erreur me disant que le fichier ne peut pas être supprimé.

Pour tester ce code, vous devez disposer d'un lecteur pouvant être physiquement configuré pour la lecture seule (clé de mémoire USB, carte SD) et essayer de supprimer un fichier pendant le débogage et après une génération.

Pourquoi le même code s'exécuterait-il différemment et comment puis-je arrêter les messages d'erreur en excès?

+0

Quelle version du framework utilisez-vous? Cela ressemble vraiment à un bug, comme une exception devrait être jeté ici - je voulais en soumettre un pour votre version si ce n'est pas déjà là-bas. – SqlRyan

Répondre

1

Vous pouvez essayer de créer un fichier sur la carte mémoire. Pour des raisons connues uniquement de Microsoft (ou non), la création d'un fichier sur un lecteur protégé contre la copie augmentera la condition d'erreur dans le bloc Try alors que la suppression d'un fichier ne le fera pas. Incidemment, j'ai obtenu le même résultat impair - attraper la suppression a bien fonctionné en mode débogage, mais pas à partir du fichier .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

Si simple, juste comment je l'aime merci –

+0

Ce comportement ne semble pas correct - y at-il un bogue de connexion pour cela? – SqlRyan

-1

Au lieu d'envelopper dans un bloc try/catch, test pour voir si le fichier existe avant d'essayer d'exécuter la suppression:

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

Ce n'est pas le problème qu'il a. Le commutateur de verrouillage rend le support en lecture seule. –

+0

Ceci est un code de test purement et je fais une référence explicite à un fichier que je sais existe. –

+0

Le fichier existe - il a des problèmes pour le supprimer des médias – SqlRyan

Questions connexes