Мониторинг модификации каталога - PullRequest
6 голосов
/ 22 сентября 2008

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

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

Какой метод лучше всего использовать для получения недавно измененных файлов в каталоге?

Он будет проверять наличие изменений только тогда, когда об этом попросит пользователь, это не будет постоянно работающий сервис.

Ответы [ 4 ]

6 голосов
/ 22 сентября 2008

Использовать объект FileSystemWatcher. Вот код для выполнения того, что вы ищете.

    // Declares the FileSystemWatcher object
    FileSystemWatcher watcher = new FileSystemWatcher(); 

    // We have to specify the path which has to monitor

     watcher.Path = @"\\somefilepath";     

    // This property specifies which are the events to be monitored
     watcher.NotifyFilter = NotifyFilters.LastAccess |
       NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName; 
    watcher.Filter = "*.*"; // Only watch text files.

    // Add event handlers for specific change events...

    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;


    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
    // Specify what is done when a file is changed, created, or deleted.
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
    // Specify what is done when a file is renamed.
    }
2 голосов
/ 22 сентября 2008

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

В этом руководстве описано, как использовать его для мониторинга каталога на предмет изменений в простой службе Windows; Как реализовать простую службу Windows Filewatcher в C #

1 голос
/ 22 сентября 2008

Если вам нужно только проверять, когда пользователь спрашивает, а не постоянно, не используйте FileSystemWatcher. Особенно, если это общий ресурс - последнее, что вам нужно, - это 50 клиентских компьютеров, просматривающих один и тот же общий каталог.

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

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

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

1 голос
/ 22 сентября 2008

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

...