FileSystemWatcher ne s’affiche pas lorsque les fichiers sont copiés ou déplacés vers un dossier

Dupliquer possible:
Détection de fichiers déplacés à l’aide de FileSystemWatcher

Je cherchais une solution pour regarder un répertoire et avertir mon application lorsqu’un nouveau fichier est déplacé dans le répertoire. La solution évidente consistait à utiliser la classe FileSystemWatcher du .NET.

Mais le problème est que cela déclenche un événement lorsqu’un nouveau fichier est créé / supprimé dans le dossier, mais ne déclenche pas un événement lorsqu’un fichier est déplacé / copié dans le dossier.

Quelqu’un peut-il me dire quelle pourrait être la cause d’un tel comportement?

mon code est

static void Main(ssortingng[] args) { Run(); } [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] public static void Run() { // Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = @"D:\New folder"; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // Only watch text files. watcher.Filter = "*.txt"; // Add event handlers. watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcher.EnableRaisingEvents = true; // Wait for the user to quit the program. Console.WriteLine("Press \'q\' to quit the sample."); while (Console.Read() != 'q') ; } // Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); } private static void OnRenamed(object source, RenamedEventArgs e) { // Specify what is done when a file is renamed. Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath); } 

J’ai utilisé FileSystemWatcher dans l’une de mes applications Home. Mais FileSystemWatcher n’a aucun événement de détection de mouvement ou de copie selon mes connaissances.

Selon MSDN

Copier et déplacer des dossiers

Le système d’exploitation et l’object FileSystemWatcher interprètent une action couper-coller ou une action de déplacement comme une action de changement de nom d’un dossier et de son contenu. Si vous coupez et collez un dossier contenant des fichiers dans un dossier en cours de surveillance, l’object FileSystemWatcher rapporte uniquement le dossier en tant que nouveau, mais pas son contenu, car ils sont essentiellement renommés.

Pour plus d’informations cliquez ici .

Ce que j’ai fait, c’était surveiller le dossier parent et les sous-dossiers et consigner chaque modification apscope. Pour inclure des sous-répertoires, j’ai utilisé la propriété suivante.

 watcher.IncludeSubdirectories=true; 

Certains googler suggérant d’utiliser une timer pour détecter les changements. Mais je ne sais pas à quel point c’est efficace.