Для оперативных уведомлений используйте ReadDirectoryChangesW, а для восстановления пропусков на подходящей файловой системе — журнал изменений USN. Одних уведомлений недостаточно для надёжного индекса.
Какие механизмы Windows вы будете использовать для отслеживания изменений в директории с миллионами файлов в реальном времени?
Для оперативных уведомлений используйте ReadDirectoryChangesW, а для восстановления пропусков на подходящей файловой системе — журнал изменений USN. Одних уведомлений недостаточно для надёжного индекса.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для оперативных уведомлений используйте ReadDirectoryChangesW, а для восстановления пропусков на подходящей файловой системе — журнал изменений USN. Одних уведомлений недостаточно для надёжного индекса.
Сначала нужен исходный индекс файлов и контроль изменений во время его построения. ReadDirectoryChangesW можно обслуживать асинхронно, например через overlapped I/O/IOCP, быстро вычитывая буфер и перенося обработку в свою очередь.
Буфер может переполниться: это не повод считать список полным. Нужен recovery через USN journal, если он доступен и сохранён нужный диапазон, либо повторное согласование с диском. Сохраняйте позицию журнала и его идентификатор; журнал может быть пересоздан или успеть потерять старые записи.
Используйте стабильные file IDs для переименований, контролируйте очередь, права и исключения поддеревьев. Наличие миллионов файлов не требует handle на каждый файл. Для сетевых путей и неподдерживаемых томов нужна отдельная стратегия.
Источник: learn.microsoft.com, learn.microsoft.com.