Как я обнаруживаю, когда каталог или файл изменяются без постоянного сканирования

Кроме чтения всех файлов и сравнения их с предыдущим снимком, там способ обнаружить, когда каталог изменяется в C# с Windows? Я не возражаю против PInvoke, если это - то, что он берет.

РЕДАКТИРОВАНИЕ класс FileSystemWatcher является большим, но один глюк - то, что необходимо начать любую работу в уведомлении об обратном вызове к фоновой задаче / поток, чтобы не блокироваться, который вызовет отброшенные события.

18
задан jjxtra 8 March 2019 в 17:36
поделиться

2 ответа

Используйте класс FileSystemWatcher - он делает то, что вы хотите. Он не сообщит вам, какие байты в файле были изменены, , но сообщит , в каких файлах есть изменения.

Из документа:

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

Чтобы отслеживать изменения во всех файлах, установите свойство Filter в пустую строку ("") или используйте подстановочные знаки (". "). К смотреть конкретный файл, установить фильтр свойство к имени файла. Для например, чтобы следить за изменениями в файл MyDoc.txt, установите фильтр свойство "MyDoc.txt". Вы также можете следить за изменениями в определенном типе файл. Например, чтобы следить за изменения в текстовых файлах, установите Фильтр свойство в "* .txt".

Есть несколько типов изменений, которые вы можно наблюдать в каталоге или файле.Например, вы можете следить за изменениями в атрибутах дату LastWrite и время, или размер файлов, или каталоги. Это делается путем установки свойство NotifyFilter к одному из значения NotifyFilters. Для большего информация о типе изменений вы можно посмотреть, см. NotifyFilters.

Вы можете следить за переименованием, удалением, или создание файлов или каталогов. Например, следить за переименованием текстовые файлы, установите для свойства Filter значение "* .txt" и вызовите WaitForChanged метод с Переименованным, указанным для его параметр.

31
ответ дан 30 November 2019 в 07:28
поделиться

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

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

Это то, с чем вам стоит быть осторожным, если вы собираетесь что-то делать с файлами.

5
ответ дан 30 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

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