Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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