FileSystemWatcher wird nicht ausgelöst, wenn Dateien in einen Ordner kopiert oder verschoben werden [duplizieren]

Mögliche Duplikate:
Erkennen verschobener Dateien mit FileSystemWatcher

Ich suchte nach einer Lösung, um ein Verzeichnis zu überwachen und meine App zu benachrichtigen, wenn eine neue Datei in das Verzeichnis verschoben wird. Die offensichtliche Lösung bestand darin, die FileSystemWatcher-Klasse von .NET zu verwenden.

Das Problem ist jedoch, dass es ein Ereignis auslöst, bei dem eine neue Datei im Ordner erstellt / gelöscht wird. Es wird jedoch kein Ereignis ausgelöst, wenn eine Datei in den Ordner verschoben / kopiert wird.

Kann mir jemand sagen, was die Ursache für ein solches Verhalten sein könnte.

Mein Code ist

static void Main(string[] 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);
    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage