Краткий ответ: Нет .Нет никакого предписанного способа сделать это в C #, потому что способ, которым вы это делаете, будет варьироваться в зависимости от вашего варианта использования.Тем не менее, существует множество вариантов для выполнения этого типа операции.
Для начала давайте рассмотрим, что если мы хотим найти содержимое в файле, в какой-то момент нам пришлось открыть файл и посмотреть его содержимое.Вы упомянули в своем последнем абзаце концепцию использования внешнего индексатора, который бы делал именно это.Как ни странно, это то же самое, что и поиск Windows, поэтому давайте начнем с этого.
Когда вы выполняете поиск Windows, он использует индекс поиска для поиска файлов.Если вы не находите искомые файлы, для этого есть несколько возможных причин.
- Индексирование поиска полностью отключено.
- Индексирование поиска не выполняется напапка, содержащая ваши файлы конфигурации.
- Индекс поиска не настроен для сканирования файлов с расширением вашей конфигурации.
Если все эти параметры настроены правильно, вы должны увидеть результаты при выполнениипоиск.Однако при выполнении поиска connectionStrings
на моем компьютере я не получил ни одного из ожидаемых файлов web.config.Если копать немного глубже, Windows Search настроен только на Index Properties Only
для .config
файлов вместо Index Properties and File Contents
.Вероятно, есть веская причина, по которой вам не следует индексировать эти файлы, но я оставлю это для другого поста.
В целом, я думаю, что попытка использовать Windows Search или другую библиотеку для этогоизлишним для такой основной задачи.Я предполагаю следующее.
- Вы знаете общее местоположение (или родительскую папку), где находятся все эти файлы конфигурации.Даже если они вложенные, вы, вероятно, находитесь в пределах 2-3 уровней каждого конфигурационного файла.
- Вы знаете расширение (и) искомого конфигурационного файла и можете добавить его в белый список.
Если вы знаете эти две вещи, эффективность поиска и поиска файлов должна быть хорошей.Вы хотите следовать шаблону, описанному ниже.
- Выберите корневую папку
- Список файлов в текущей папке.Выберите и файлы с расширениями, которые соответствуют вашему белому списку.
- Прочитайте содержимое файла и найдите свою строку.Вы можете сделать это, используя буферы, но вам нужно будет иметь немного более сложную логику для крайних случаев (когда ваш поисковый термин перекрывает край вашего буфера).В этом не должно быть необходимости, если только они не являются чем-то большим, чем просто конфигурационные файлы.
- Любые файлы, содержащие искомый термин, для которого вы выполняете требуемое действие.
- Теперь просканируйте текущую папку на наличиедругие папки.Рекурсивно обрабатывайте каждую папку, каждый раз возвращаясь к шагу № 2.
Чтобы усовершенствовать это решение, вы можете использовать временный кэш, где вы отслеживаете каждый соответствующий файл, для которого требуется создать резервную копию.,Вы можете сохранить этот кеш в файл (вместе с отметкой времени) и выполнять повторное сканирование только через определенный промежуток времени.Таким образом, для последующих запусков вашей утилиты резервного копирования вам не нужно искать файловую систему, вы просто создаете резервные копии файлов.
Другой вариант - сохранить черный список всех «ложноположительных» файлов, чтобы вы не делалине буду искать содержимое файлов в будущем.
Надеюсь, это поможет, и если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.