J'essaie d'être informé si un fichier est créé, copié ou déplacé dans un répertoire que je regarde. Je veux seulement être averti sur les fichiers cependant, pas les répertoires.
Voici une partie du code que j'ai actuellement: p> problème est, si je déplace un répertoire qui contient un fichier dedans, je ne reçois aucun événement pour ce fichier. P> Comment puis-je l'obtenir pour m'avoir informé pour tous les fichiers ajoutés (quels que soient le mode de répertoire observé ou ses sous-répertoires? P> Incase Je n'ai pas suffisamment expliqué ... j'ai regardervedirectory em>, et annuaire1 em>. Directory1 em> contient hello.txt em>. Si je déplace répertoire1 em> dans regisdeddirectory em>, je veux être averti pour hello.txt em>. P>
3 Réponses :
Peut-être que cette solution de contournement pourrait être utile (mais je ferais attention à la performance car elle implique une récursive):
Le système d'exploitation et l'objet FileSystemWatcher interprète une action de coupe et une action de déplacement comme une action Référence: MSDN P>
Mais j'ai défini la propriété IndemnubDirectories i>, et je surveille pour les événements renommés. Toujours aucun événement ne fait apparaître.
Ajoutez des filtres supplémentaires à votre Cela semble fonctionner uniquement pour des actions de copie / coller. Pour les actions de coupe / pâte (ou de glisser-déposer), ajoutez le filtre notify suivant également: J'ai joué avec elle un peu plus et, en effet, une seule notification pour le dossier de niveau supérieur est disponible.
A du sens, si vous venez penser à cela. Puisque le type de changement est créé em>, vous savez certainement que tous les fichiers et tous les dossiers à l'intérieur sont nouveaux et que vous pouvez les traiter. P> Donc, @ Alexfilipovici's Approparation est la seule viable , bien que j'entiendrais le résultat (dossier) et le traiter sur un thread de travailleur (ou une tâche, peu importe). Vous ne voulez pas passer trop de temps à l'intérieur d'un gestionnaire d'événements Fswatcher, surtout si les fichiers arrivent à un taux élevé. P> p> notifyfilters code>. Pour le moment, vous ne surveillez que des modifications des noms de fichiers. Que, avec vos gestionnaires modifiés et renommés devraient faire le travail.
notifyfilters.directoryname code>. P>
J'ai essayé cela, mais je n'ai toujours pas de notification pour faire des événements de déménagement.
@JOSH: réponse mise à jour. Aussi le testé sur la victoire 8 et fonctionne bien.
Le notifyfilters.directoryName i> Flees est incendie un événement pour le répertoire, mais pas le contenu (ce que j'essaie de vous être informé).
FileSystemWatcher.IncludesubDirectories Propriété devrait faire cela .
Pour moi, le code ci-dessus fonctionne très bien.
@ALEXFILIPOVICI: Josh a déjà inclus cette ligne dans son code