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");
}