C # Monitor File Activity - PullRequest
       50

C # Monitor File Activity

0 голосов
/ 13 января 2019

Мне нужно отслеживать файл на предмет изменений и точно знать, где он был изменен.

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

Я хотел бы реализовать что-то вроде того, что есть у SysInternals в их программном обеспечении Process Monitor, которое сообщает нам для события WriteFile измененную часть файла с учетом смещения и длины.

Я прочитал, что есть API для Windows, который делает это, но я не смог найти что-либо о том, как и где начать реализовывать его в приложении .net 3.5.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Используя FileSystemWatcher, вы можете подписаться на измененное событие ChangedEvent

FileSystemEventArgs содержит свойство FullPath, которое можно передать в FileInfo . Это даст вам некоторую базовую информацию о файле, которую, например, можно сохранить в базе данных. Вы можете сохранить историю изменений файла таким образом.

Если вам нужно сравнить содержимое файлов, это более сложная задача, и подход будет отличаться в зависимости от типа файла.

0 голосов
/ 13 января 2019

Из того, что я исследовал, платформа .NET предоставляет это событие для обработки событий изменения файла. Однако одно это не даст вам знать, какая часть файла изменилась.

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

...