Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Используйте объект 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.
    }

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top