FileSystemWatcher не ловит изменения - PullRequest
0 голосов
/ 14 ноября 2018

FileSystemWatcher не работает с файлом, в который записывается другая программа. Каждый раз, когда этот файл записывается, добавляется новая строка. Я хочу знать, когда это произойдет. Я попытался реализовать FileSystemWatcher, однако он не предупреждает меня каждый раз, когда происходит изменение. Я знаю, когда файл был записан, поэтому я знаю, что наблюдатель пропустил предупреждение мне. Я создал кнопку, чтобы проверить размер файла. Когда кнопка нажата (после того, как файл будет записан), предупреждение, наконец, срабатывает. Я добавил Error в наблюдателя, чтобы попытаться проверить, не заполнен ли буфер, но это не так. Я думаю, что это как-то связано с тем, что файл все еще может быть записан другой программой. Любой совет будет принят во внимание. CreateFileWatcher запускается при запуске программы. Показанный путь не является истинным путем. Я просто хочу получить уведомление, когда файл будет записан.

 public void CreateFileWatcher()
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"C:\Program Files\test";
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Size;
        watcher.Filter = "";

        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Error += new ErrorEventHandler(LogBufferError);

        watcher.EnableRaisingEvents = true;
    }

 private void OnChanged(object sender, FileSystemEventArgs e)
    {
        MessageBox.Show("SomethingChanged");
    }

    void LogBufferError(object sender, ErrorEventArgs e)
    {
        string log = string.Format("{0:G} | Buffer limit exceeded", DateTime.Now);
        MessageBox.Show("BufferError");
    }

1 Ответ

0 голосов
/ 15 ноября 2018

Ваш фильтр должен быть:

watcher.Filter = "*.*";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...