Определить вновь созданный файл, только что отредактированный файл - PullRequest
4 голосов
/ 05 апреля 2011

Я пытаюсь прочитать файл своевременно, когда происходит редактирование или создание. Есть еще одна часть оборудования, которая создает файлы в папке, к которой я хочу получить доступ (своевременно).

Как обнаружить обнаружение создания вновь отредактированного или созданного файла с использованием C # .net. Я не хочу опрашивать папку на периодической основе, поскольку машина потенциально может записывать несколько раз между интервалами опроса. т.е. я хочу избежать:

  • Файл 1 (создан) 10:00:04 AM
  • Файл опроса 1 (данные не потеряны) 10:00:05 AM
  • Файл 1 (перезаписывается новыми данными) 10:00:07 AM
  • Файл опроса 1 (данные не потеряны) 10:00:10 AM
  • Файл 1 (перезаписывается новыми данными) 10:00:12 AM
  • Файл 1 (перезаписан новыми данными) 10:00:14 AM
  • Файл опроса 1 (10:00:12 утра данных потеряно) 10:00:15 AM

Ответы [ 3 ]

6 голосов
/ 05 апреля 2011

Все просто, используйте FileSystemWatcher .

5 голосов
/ 05 апреля 2011

Я думаю, класс FileSystemWatcher даст вам то, что вы ищете.

4 голосов
/ 05 апреля 2011

Вы можете использовать FileSystemWatcher class.Это позволяет вам смотреть конкретный каталог (вы также можете применить фильтр для типа файла), и если файл будет изменен, событие будет вызвано.

Здесь у вас есть пример кода из msdn :

// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = args[1];
/* 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;

, где OnChanged и OnRenamed - обработчики событий с вашей логикой.

...