FileSystemWatcher OnCreated ne se déclenche que pour le premier fichier de plusieurs fichiers copiés

J’ai un FileSystemWatcher que je voudrais déclencher un OnCreated event pour chaque dossier copié dans le répertoire surveillé . Plusieurs dossiers seront copiés dans ce répertoire surveillé en même temps, manuellement.

Actuellement, l’ event n’est déclenché que pour le premier dossier copié.
Donc, si je regarde le dossier X et que je sélectionne les dossiers A, B, C dans l’explorateur Windows et que je les copie dans X, OnCreated est déclenché pour A mais pas pour B ni C.

Voici le code que j’utilise pour configurer FileSystemWatcher :

 watcher = new System.IO.FileSystemWatcher(watchPath); watcher.InternalBufferSize = 32768; watcher.IncludeSubdirectories = true; watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.CreationTime | NotifyFilters.LastWrite; watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnCreated); watcher.EnableRaisingEvents = true; 

et voici ma méthode OnCeated

 void OnCeated(object sender, FileSystemEventArgs e) { XDocument xmlDoc = BeginImport(e.FullPath); } 

Avez-vous une idée de la raison pour laquelle l’événement n’est déclenché que par le premier dossier copié dans le répertoire surveillé?

De la documentation :

Le système d’exploitation Windows informe votre composant des modifications de fichier dans un tampon créé par FileSystemWatcher. S’il y a beaucoup de changements en peu de temps, la mémoire tampon peut déborder. Ainsi, le composant perd la trace des modifications apscopes au répertoire et ne fournit qu’une notification globale . L’augmentation de la taille du tampon avec la propriété InternalBufferSize est coûteuse, car elle provient d’une mémoire non paginée qui ne peut pas être échangée sur un disque. Conservez donc le tampon aussi petit que suffisamment grand pour ne manquer aucun événement de modification de fichier. Pour éviter un débordement de mémoire tampon, utilisez les propriétés NotifyFilter et IncludeSubdirectories afin de filtrer les notifications de modification non désirées.

Cela semble être une limitation interne.

Je pense que le fait de coller les trois dossiers à la fois est considéré comme “beaucoup de changements en un temps record “. Pouvez-vous utiliser le NotifyFilter et laisser de côté certains événements?