Контролируйте несколько использований папок FileSystemWatcher

Что лучший способ состоит в том, чтобы контролировать несколько папок (не подкаталоги) использование FileSystemWatcher в C#?

22
задан Jon Seigel 26 April 2010 в 20:42
поделиться

5 ответов

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

Вы можете попытаться обмануть это поведение, воспользовавшись возможностью FileSystemWatcher включать подкаталоги. Вы можете создать точку соединения NTFS (также известную как символическая ссылка) в качестве подкаталога из каталога, который вы просматриваете.У Марка Руссиновича из компании Sysinternals есть служебная программа под названием Junction , которая упрощает создание символических ссылок и управление ими.

Обратите внимание, что вы можете создавать символические ссылки только на каталоги на вашем локальном компьютере.

3
ответ дан 29 November 2019 в 04:44
поделиться

Самый простой способ - создать несколько экземпляров FileSystemWatcher объект.

http://www.c-sharpcorner.com/UploadFile/mokhtarb2005/FSWatcherMB12052005063103AM/FSWatcherMB.aspx

Вы должны убедиться, что вы правильно обрабатываете события между двумя папками:

Хотя некоторые общие события, такие как копирование или перемещение файла, не напрямую связаны с событием, эти события вызывают событие . Когда вы копируете файл, система вызывает событие Created в каталоге , в который файл был скопирован , но не вызывает никаких событий в исходном каталог. Когда вы перемещаете файл , сервер вызывает два события: событие Deleted в исходном каталоге, , за которым следует событие Created в целевом каталоге .

Например, вы создаете два экземпляра FileSystemWatcher. FileSystemWatcher1 настроен на наблюдение "C: \ My Documents", а FileSystemWatcher2 установлен чтобы посмотреть "C: \ Your Documents". Теперь, если вы скопируете файл из «Мои документы» в «Ваши документы», FileSystemWatcher2 вызовет событие Created , но не событие . возбуждается для FileSystemWatcher1. В отличие от копирования, перемещение файла или каталога вызовет два события.В предыдущем примере , если вы переместили файл из «Мои документы» в «Ваши документы», событие Created будет вызвано FileSystemWatcher2 и событие Deleted будет инициировано FileSystemWatcher

Ссылка на FileSystemEventArgs

13
ответ дан 29 November 2019 в 04:44
поделиться

Можете ли вы просто использовать несколько экземпляров FileSystemWatcher, по одному для каждого каталога?

1
ответ дан 29 November 2019 в 04:44
поделиться

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

20
ответ дан 29 November 2019 в 04:44
поделиться

Вам потребуется создать несколько экземпляров объекта FileSystemWatcher . Хотя вы можете привязать события к одному и тому же методу и использовать объект-отправитель, чтобы определить, какой FileSystemWatcher вызвал событие.

        var fsw1 = new FileSystemWatcher();
        var fsw2 = new FileSystemWatcher();
        FileSystemEventHandler fsw_changed = delegate(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine("{0} - {1}", (sender as FileSystemWatcher).Path, e.ChangeType);
        };
        fsw1.Changed += fsw_changed;
        fsw2.Changed += fsw_changed;
2
ответ дан 29 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: