2009-07-13 10 views
1

Je suis confronté à un problème avec filewatcher. Mon exigence est que lorsque nous copions un grand dossier de taille GB ou plus, FSW doit enregistrer un seul changement que le dossier X a créé, mais ne pas donner les événements créés de fichiers sous X. Et je voulais calculer MD5 Checksums de tous ces fichiers qui sont copiés avec le dossier "X". Comme la copie de gros fichiers prend beaucoup de temps, je n'arrive pas à obtenir tous les noms de fichiers et de sous-dossiers sous X. Je dois obtenir tous les chemins de fichiers à ajouter à une structure de données de dictionnaire. Pourriez-vous s'il vous plaît donner des conseils à ce sujet.FileSystemWatcher

public static string[] GetFilesAndFolders(string path) 
    { 
     foreach (string dirs in Directory.GetDirectories(path)) 
     { 
      fileandFolderNames[counter] = dirs; 
      counter++; 
      foreach (string files in Directory.GetFiles(dirs)) 
      { 
       fileandFolderNames[counter] = files; 
       counter++; 
      } 
      GetFilesAndFolders(dirs); 
     } 
     return fileandFolderNames; 
    } 
+0

Et un commentaire hors thème, pourquoi vous écrivez «et» à partir de minuscules dans le nom de la fonction? Il sera plus lisible avec des majuscules, par ex. - getFilesAndFolders. –

+3

en fait avec des conventions de nommage standard, il devrait être GetFilesAndFolders() – Ian

+0

que vous ne devriez pas modifier l'appel de fonction récursive aussi;) Je n'ai pas accès à modifier les questions :) –

Répondre

3

Depuis la copie d'un dossier volumineux n'est pas une seule opération, mais consiste plutôt que de nombreuses opérations de copie séparées, l'FileSystemWatcher ne peut pas déterminer si l'opération de copie du dossier complet est complet. Ainsi, il vous donnera une notification sur chaque fichier séparément. Ma suggestion est de gérer chaque fichier séparément. Quand il est copié (l'événement de FileSystemWatcher est déclenché), calculez le MD5 et placez-le dans le dictionnaire.

0

Une chose que vous devez savoir est que la copie récursive de tous les fichiers et dossiers est un débordement de pile en attente de se produire. Voir this question et this blog post pour savoir comment créer une hiérarchie de répertoires dans une classe IEnumerable non récursive.

Questions connexes