Проверьте наличие наблюдателя файловой системы в C#

Я написал этот код для просмотра файлов в моей системе, но он не предупреждает о каких-либо изменениях в папке или файле. Как я могу этого добиться? Я не понимаю, поскольку он не показывает никаких исключений или ошибок.

static void Main(string[] args)
{
  FileSystemWatcher();
}

public static void FileSystemWatcher()
{
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = @"D:\watcher";
    watcher.NotifyFilter = NotifyFilters.LastWrite;
    watcher.Filter = "*.*";
    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.EnableRaisingEvents = true;
    Console.Read();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
   Console.WriteLine(e.Name + " has changed");
}

person Abb    schedule 09.09.2015    source источник
comment
Вы уверены, что событие Changed именно то, что вам нужно? Он будет отслеживать только изменение файлов, а не их создание, удаление или переименование. Вот список событий.< /а>   -  person Dave Zych    schedule 09.09.2015
comment
@DaveZych Возможно ли добиться того и другого, потому что мне нужен только 1 файл XML в папке, который время от времени будет меняться. Здесь я могу проверить, есть ли у меня новый дополнительный файл xml?   -  person Abb    schedule 09.09.2015
comment
Как предложил @DaveZych, событий больше. Добавьте обработчик события Created, чтобы уведомлять пользователя о создании файла.   -  person Melvin    schedule 09.09.2015
comment
Диск D: является локальным или сетевым?   -  person Black Frog    schedule 09.09.2015
comment
@Melvin Прежде всего следует отметить, что мой код не уведомляет об изменении содержимого файла.   -  person Abb    schedule 09.09.2015
comment
@BlackFrog Это местное. В будущем это будет машина клиента   -  person Abb    schedule 09.09.2015
comment
Когда вы говорите о клиентской машине будущего, означает ли это, что вы будете просматривать диск/путь через сетевой ресурс? Или это означает, что исполняемый файл будет работать на клиентской машине, наблюдая за локальным устройством?   -  person Black Frog    schedule 09.09.2015
comment
У меня была аналогичная проблема с конкретным приложением - при обновлении файла он делал копию оригинала с временным именем, изменял временный файл, удалял оригинал и переименовывал временный файл в исходное имя файла (я не написать это приложение !!). Измененное событие в этой ситуации не срабатывало — я отследил это, добавив обработчики ко всем возможным событиям, чтобы увидеть, что произошло.   -  person PaulF    schedule 09.09.2015
comment
@Black Frog Исполняемый файл   -  person Abb    schedule 09.09.2015


Ответы (2)


Я обновил код. NotifyFilter необходимо расширить, если вы хотите видеть добавленные новые файлы

    static void Main(string[] args)
    {
        FileSystemWatcher();
    }

    public static void FileSystemWatcher()
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"D:\temp";
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
   | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        watcher.Filter = "*.*";
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += Watcher_Created;
        watcher.Renamed += Watcher_Renamed;
        watcher.EnableRaisingEvents = true;
        Console.Read();
    }

    private static void Watcher_Renamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine(e.Name + " has been renamed");
    }

    private static void Watcher_Created(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine(e.Name + " has been added");
    }

    private static void OnChanged(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine(e.Name + " has changed");
    }
person Joe    schedule 09.09.2015
comment
Как вы проверяли? Изменив содержимое файла? и если в какой строке кода? - person Abb; 09.09.2015
comment
Запустил ваш код, открыл файл во временной директории и добавил к нему данные. Он уведомил меня сразу - person Joe; 09.09.2015
comment
Да, это сработало только тогда, когда я открываю файл, меняю содержимое и сохраняю его. Он срабатывает только при сохранении файла. Есть ли способ проверить наличие нового предупреждения о создании файла? - person Abb; 09.09.2015