2014-07-21 3 views
1

J'ai rencontré des problèmes. J'ai un programme de synchronisation et j'ai besoin de savoir si un élément de surveillance est un fichier ou un dossier. Le problème est quand je suis fichier ou un dossier de vérification existe - peu importe quoi, si je vérifie un fichier, File.Exists renvoie toujours false:File.Exists() renvoie la valeur false dans l'événement Deleted de FileSystemWatcher

private void onDelete(object o, FileSystemEventArgs e) 
{ 
    if (Directory.Exists(e.FullPath)) 
     Directory.Delete(watched + e.Name, true); 

    if (File.Exists(e.FullPath)) 
     File.Delete(e.FullPath); 
} 

Quelqu'un voit où le problème pourrait être?

+0

Qu'est-ce que 'e.FullPath' lorsque vous supprimez un fichier? –

+0

qu'est-ce que vous obtenez dans 'e.FullPath'? et avez-vous vérifié si le fichier existe réellement ou non? – SpiderCode

+0

Essayez de sortir 'e.FullPath' en utilisant Console.WriteLine ou MessageBox pour voir si vous manipulez un vrai chemin – bumbumpaw

Répondre

5

Vous essayez de trouver de fichier/dossier sur onDelete, cette méthode serait déclenchée lorsque le fichier/dossier est déjà supprimé. Donc, vous ne devez pas obtenir ce fichier sur le dossier car il est supprimé et n'existe pas. FileSystemWatcher est un système de notification, pas un point d'accès.

+0

oh ... eh bien, merci. Cela ne m'a pas traversé l'esprit. Je vais essayer de le réparer si je comprends comment –

+0

Vous êtes les bienvenus. – Adil

0

Vous n'intervenez pas avec les événements qu'il déclenche, vous n'avez donc pas à supprimer le fichier vous-même lorsqu'un événement Deleted est déclenché: vous recevez un tel événement après la suppression s'est déjà produite.

0

Comme l'a dit Adil dans sa réponse, vous êtes déjà trop en retard. Cependant, vous pourriez peut-être distinguer les éléments par le nom de fichier lui-même? Si vous êtes le seul à créer les fichiers et les dossiers, vous pouvez établir une convention. Par exemple, vous pouvez utiliser une extension de fichier, que vous pouvez ensuite obtenir facilement à partir du nom de fichier (Path.GetExtension). À part cela, vous seriez probablement obligé de garder le compte de tous les fichiers et dossiers du répertoire, pour vous assurer qu'ils sont du type que vous voulez.

Questions connexes