Visual studio поиск по маске
Для того чтобы разработка была продуктивной, необходимо перемещаться по базе программ и быстро находить требуемый код. Система Visual Studio 2013 предоставляет не одну, а множество функций поиска, предназначенных для выполнения конкретных задач. Сначала мы обсудим каждую из этих функций, а также опишем ситуации, в которых они могут понадобиться.
Окно Quick Find/Replace
Простейшим инструментом поиска в системе Visual Studio 2013 является диалоговое окно Quick Find. Функциональные возможности поиска и замены в системе Visual Studio 2013 разделены между двумя командами, имеющими общие диалоговые окна и свойства, Quick Find и Quick Replace, которые выполняют поиск информации, которую необходимо быстро найти в открытом документе или текущем проекте. Эти два инструмента имеют ограниченные возможности для фильтрации и расширенного поиска, как будет показано далее, даже существующие свойства обеспечивают работу мощной поисковой системы, намного превосходящую практические потребности большинства пользователей.
Этот инструмент поиска лучше всего настроен на поиск и замену текста (в отличие от поиска и замены символа).
Команда Quick Find
Термин Quick Find в системе Visual Studio 2013 используется как название инструмента, имеющего самые главные функциональные возможности для поиска. По умолчанию он находит отдельное слово или фразу в текущем документе, но даже команда Quick Find имеет дополнительные возможности для расширенного поиска за пределами активного модуля и даже для использования шаблонных символов и регулярных выражений в запросе.
Для того чтобы выполнить команду Find, нажмите стандартную комбинацию клавиш или выберите команду Edit --> Find and Replace --> Quick Find. В ответ система Visual Studio откроет основное окно Find and Replace, в котором фокус по умолчанию находится на команде Quick Find:
Показанная на рисунке панель незначительно отличается от версии Visual Studio 2012, однако, в более ранних версиях Visual Studio окно поиска было модальным, теперь же панель поиска является ненавязчивой. Вы можете ввести критерии поиска в текстовом поле или выбрать значение из предыдущих поисков, щелкнув по стрелке справа от текстового поля. По умолчанию область поиска ограничена текущим документом или окном редактирования.
При вводе каждого символа в текстовое поле поиска, редактор кода переходит к следующему совпадению введенного текста. Вы можете изменить область поиска. Для этого сначала щелкните по кнопке в виде угловой стрелки слева от поля поиска. Эта кнопка позволяет переключаться между режимами поиска и поиска с заменой. В нижней части диалогового окна вы увидите поле с выпадающим списком, позволяющим менять контекст поиска - Selection (поиск в выделенном тексте), Current Block (поиск в текущем блоке кода, где находится фокус ввода), Current Document (поиск по текущему открытому документу), Current Project (поиск по проекту), Entire Solution (поиск по всем проектам в решении) и All Open Documents (поиск во всех открытых документах):
Выбрав команду Quick Find в первый раз, можете больше не открывать диалоговое окно, а просто нажимайте клавишу , если требуется выполнить тот же самый поисковый запрос.
Команда Quick Replace
Выполнение команды Quick Replace похоже на выполнение команды Quick Find. Между этими командами можно переключаться, щелкая на кнопке слева от текстового поля поиска. Если хотите перейти непосредственно к окну Quick Replace, нажмите комбинацию клавиш или выберите команды Edit --> Find and Replace --> Quick Replace. Функциональные возможности окна Quick Replace аналогичны функциональным возможностям окна Quick Find, но во втором окне есть дополнительное поле, в котором можно указать текст, используемый для замены.
Поле Replace With аналогично полю Find What - в нем можно либо набрать новую строку для замены, либо выбрать одну из ранее набранных строк в раскрывающемся списке.
Для того чтобы удалить повторяющиеся значения, просто выполните замену, ничего не указывая в поле ввода Replace With. Эта возможность позволяет находить все вхождения заменяемых значений и решать, следует ли их удалить.
Группа Find Options
Иногда необходимо отфильтровать результаты поиска, используя разные критерии. Именно в этой ситуации можно воспользоваться возможностями поиска. Во-первых, для того чтобы вывести на экран группу вариантов поиска (доступную во всех командах поиска и замены), следует щелкнуть на пиктограмме Find Options. В открывшемся диалоговом окне, содержащем набор флажков (для версии 2010) и раскрывающийся список, можно выбирать варианты поиска, как показано на рисунке ниже:
В версии Visual Studio 2010 эти опции также содержали варианты вида поиска: чувствительный к регистру (Match Case) или полное совпадение (Match Whole Word). Можно было также изменять направление поиска (Search Up) и указать, что вы собираетесь выполнять сложный поиск, используя шаблонные символы или регулярные выражения. В версии Visual Studio 2012 эти опции вынесли в отдельные кнопки, которые располагаются снизу в окне поиска.
Регулярные выражения при поиске
Чтобы включить режим поиска с использованием регулярных выражений, необходимо нажать кнопку в виде звездочки внизу окна Quick Find. На рисунке ниже показан пример поиска переменных, содержащих в названии слово "value" и последующее за ним число:
Настройки Find and Replace
Примеры регулярных выражений
В таблице ниже собраны некоторые символы, операторы, конструкции и примеры для регулярных выражений. Более подробный справочник по регулярным выражениям вы найдете здесь.
Назначение | Expression | Пример |
---|---|---|
Соответствует любому одиночному символу, кроме разрыва строки Дополнительные сведения см. в разделе Любой символ. | . | a.o совпадает с "ато" в слове "каток" и "aзo" в слове "азот", но не с "арто" в слове "картон" |
Соответствует нулю или большему числу вхождений предыдущего выражения (совпадение с максимальным числом символов). Дополнительные сведения см. в разделе Совпадение ноль или несколько раз: *. | * | a*r совпадает с "в" в слове "винт" и "ав" в слове "авто". |
Соответствует любому символу ноль или более раз. | .* | c.*e совпадает со "сне" в слове "снег", "сове" в слове "совет" и "скате" в слове "скатерть" |
Соответствует одному или большему числу вхождений предыдущего выражения (совпадение с максимальным числом символов) Дополнительные сведения см. в разделе Совпадение один или несколько раз: +. | + | e+d совпадает с "eed" в "feeder" и с "ed" в "faded". |
Сопоставление любого символа один или более раз. | .+ | e.+e совпадает с "eede" в "feeder", но в "feed" совпадения отсутствуют. |
Соответствует нулю или большему числу вхождений предыдущего выражения (совпадение с минимальным числом символов) Дополнительные сведения см. в разделе Совпадение ноль или несколько раз (ленивое совпадение): *?. | *? | \w*?d совпадает с "fad" и "ed" в "faded", но не со всем словом "faded", так как проверяется соответствие с минимальным числом символов. |
Соответствует одному или большему числу вхождений предыдущего выражения (совпадение с минимальным числом символов) Дополнительные сведения см. в разделе Совпадение один или несколько раз (ленивое совпадение): +?. | +? | e\w+? совпадает с "ee" в "asleep" и с "ed" в "faded", но в "fade" совпадения отсутствуют. |
Привязывает сопоставляемую строку к началу строки. | ^ | ^car совпадает с такими словами, как "продажа" и "процесс", только если они находятся в начале строки |
Привязывает сопоставляемую строку к концу строки. | \r?$ | car\r?$ совпадает со словом "car", только если оно находится в конце строки. |
Соответствует вхождению, только если оно находится в конце файла | $ | car$ совпадает со словом "car", только если оно находится в конце файла. |
Соответствует любому отдельному символу в наборе. | [abc] | b[abc] совпадает с "ба", "бб" и "бв" |
Соответствует любому символу в диапазоне символов. | [а-е] | be[n-t] совпадает с "bet" в слове "between", с "ben" в слове "beneath" и с "bes" в слове "beside", но в слове "below" совпадения отсутствуют. |
Запись и неявная нумерация выражения в скобках | () | ([a-z])X\1 совпадает с "аХа" и "бХб", но не с "аХб". "\1" относится к первой группе выражения "[а–я]". Дополнительные сведения см. в разделе Группы записи и шаблоны замены. |
Признание соответствия недействительным | (?!абв) | real(?!ity) совпадает со словами "реальный" и "реальность", но не со словом "реальная". Кроме того, находит второй элемент "реальн" (но не первый "реальн") в "реальнаяреальность". |
Соответствует любому символу, не входящему в указанный набор. Дополнительные сведения см. в разделе Отрицательная группа символов. | [^абв] | be[^n-t] совпадает с "bef" в слове "before", с "beh" в слове "behind" и с "bel" в слове "below", но в слове "beneath" совпадения отсутствуют. |
Совпадает с выражением до или после символа. | | | (sponge|mud) bath совпадает со строками "хвойный лес" и "лиственный лес" |
Экранирует символ, указанный за обратной косой чертой. | \ | \^ соответствует символу ^ |
Определяет количество вхождений предыдущего символа или группы. Дополнительные сведения см. в разделе Совпадение ровно n раз: . | , где n обозначает число вхождений. | x(ab)x совпадает с "xababx" x(ab)x совпадает с "xababx" и "xabababx", но не "xababababx" |
Сопоставление текста в категории Юникода. Дополнительные сведения о классах символов Юникода, см. в документе о свойствах символов в стандарте Юникода 5.2. | \p, где "X" — число из Юникода. | \p совпадает с "T" и "D" в "Thoma Doe" |
Соответствует границе слова | \b (вне класса символов \b определяет границу слова, а внутри класса \b символов определяет стирание назад) | \bin совпадает с "in" в "inside", но в "pinto" совпадения отсутствуют. |
Соответствует разрыву строки (то есть возврату каретки с последующим символом новой строки). | \r?\n | End\r?\nBegin совпадает со словами "Конец" и "Начало", только если "Конец" является последним словом в строке, а "Начало" — первым словом в следующей строке |
Соответствует любому алфавитно-цифровому знаку. | \w | a\wd совпадает с "акт" и "а1т", но не с "а т" |
Соответствует любому символу пробела. | \s | Public\sInterface совпадает с фразой "Открытый интерфейс" |
Соответствует любому символу десятичной цифры | \d | \d совпадает с "4" и "0" в "wd40". |
Пример регулярного выражения, в котором объединяются некоторые операторы и конструкции для сопоставления с шестнадцатеричным числом: \b0[xX]([0-9a-fA-F]+)\b . Это выражение совпадает с "0xc67f", но не с "0xc67g".
Группы записи и шаблоны замены
Группы записи отделяют части регулярных выражений и захватывают подстроки из входной строки. Вы можете использовать группы записи как в самом регулярном выражении (например, для поиска повторяющихся слов), так и в шаблоне замены. Подробную информацию см. в статье Конструкции группировки в регулярных выражениях.
Чтобы создать нумерованную группу записи, заключите в скобки часть выражения в шаблоне регулярного выражения. Выделенные части автоматически нумеруются слева направо в порядке появления открывающих скобок в регулярном выражении. Для доступа к группе записи используйте:
Внутри регулярных выражений: Используйте ключевое слово \number . Например, \1 в регулярном выражении (\w+)\s\1 обозначает первую именованную группу, то есть (\w+) .
Внутри шаблона замены: Используйте ключевое слово $number . Например, группированное регулярное выражение (\d)([a-z]) определяет две группы: первая группа содержит одну десятичную цифру, а вторая группа содержит один символ от a до z. Выражение обнаруживает четыре совпадения в следующей строке: 1a 2b 3c 4d. Строка замены z$1 ссылается только на первую группу ( $1 ) и преобразует строку в z1 z2 z3 z4.
На следующем изображении показаны регулярное выражение (\w+)\s\1 и строка замены $1 . Само регулярное выражение и шаблон замены считаются первой группой записи с автоматически присвоенным номером 1. Если вы выполните команду Заменить все в диалоговом окне Быстрая замена, Visual Studio удалит из текста повторяющиеся слова.
Убедитесь, что в диалоговом окне Быстрая замена нажата кнопка Использовать регулярные выражения.
Именованные группы записи
Вы можете не полагаться на автоматическую нумерацию групп записи, а присвоить им имена. Для именованной группы записи используется синтаксис (?subexpression) .
Именованные группы записи, как и нумерованные, можно использовать в самом регулярном выражении или шаблоне замены. Для доступа к именованной группе захвата используйте:
Внутри регулярных выражений: Используйте ключевое слово \k . Например \k в регулярном выражении (?\w+)\s\k ссылается на группу записи с именем repeated , которая содержит часть выражения \w+ .
Внутри шаблона замены: Используйте ключевое слово $ . Например, $ .
На следующем изображении представлен пример регулярного выражения (?\w+)\s\k и строки замены $ . Само регулярное выражение и шаблон замены указывают на группу записи с именем repeated . Если вы выполните команду Заменить все в диалоговом окне Быстрая замена, Visual Studio удалит из текста повторяющиеся слова.
Убедитесь, что в диалоговом окне Быстрая замена нажата кнопка Использовать регулярные выражения.
Дополнительные сведения об именованных группах захвата см. в разделе Именованные сопоставляемые части выражения. Дополнительную информацию о регулярных выражениях, которые используются в шаблонах замены, вы найдете. в разделе руководства Подстановки в регулярных выражениях.
Функция Поиск в файлах позволяет выполнять поиск в указанном наборе файлов. Найденные Visual Studio совпадения приводятся в окне Результаты поиска в интегрированной среде разработки. Способ отображения результатов зависит от параметров, выбранных на вкладке Найти в файлах диалогового окна Найти и заменить.
Если вы используете Visual Studio 2019 версии 16.6 или более ранней, диалоговое окно Найти и заменить может выглядеть не так, как показано здесь. Перейдите на версию этой страницы для Visual Studio 2017, чтобы получить правильное описание.
Отображение функции поиска в файлах
Чтобы открыть диалоговое окно Найти и заменить, выполните указанные ниже действия или нажмите клавиши CTRL+SHIFT+F.
Нажмите клавиши CTRL+Q и введите "найти" в поле поиска в верхней части экрана.
Выберите в списке результатов Найти в файлах.
В строке меню выберите Правка > Найти и заменить.
Во всплывающем меню выберите пункт Найти в файлах.
Чтобы отменить операцию поиска, нажмите клавиши CTRL+BREAK.
Средство поиска и замены не выполняет поиск в каталогах, для которых задан атрибут Hidden или System .
Найти
Чтобы найти новую текстовую строку или выражение, введите их в поле Найти.
поле поиска;
Чтобы найти новую текстовую строку или выражение, введите их в поле "Поиск". Для поиска любой из 20 строк, которые вы искали недавно, откройте раскрывающийся список и выберите нужную строку.
Можно выбрать или отключить указанные ниже параметры.
Учитывать регистр. Если выбрать этот параметр, поиск будет выполняться с учетом регистра.
Слово целиком. Если выбрать этот параметр, в результатах поиска будут только полностью совпадающие слова.
Использовать регулярные выражения. Этот параметр позволяет применять специальные обозначения, чтобы определить шаблоны текста для поиска соответствия в текстовых полях "Найти" или Заменить. Список этих обозначений см. в статье Использование регулярных выражений в Visual Studio.
Кнопка Построитель выражений отображается рядом с полем поиска, только если установлен флажок Использовать регулярные выражения.
Искать в
Пункт, выбранный в раскрывающемся списке Искать в, определяет, будет ли функция Найти в файлах выполнять поиск по всей рабочей области, по всему решению, по текущему проекту, текущему каталогу, всем открытым документам или текущему документу.
Можно также нажать рядом кнопку Обзор (. ) , чтобы выбрать место для поиска. Более того, если вы уже указали каталог, нажатие этой кнопки не заменяет каталог, а добавляет новый. Например, если для параметра "Где искать" задано значение .\Code, можно нажать кнопку Обзор (. ) и перейти в папку с именем Shared Code. Теперь в поле Обзор (. ) будут отображаться папки .\Code и .\Shared Code. При выполнении команды "Найти" поиск будет выполняться в обеих этих папках.
Чтобы уточнить условия поиска, можно выбрать следующие параметры (или отменить их выбор):
- Include external items (Включить внешние элементы). Этот параметр позволяет включить внешние элементы, такие как "windows.h", на которые можно добавить ссылку, но которые не являются частью решения.
- Include miscellaneous files (Включить прочие файлы). Этот параметр позволяет включить прочие файлы, например открытые вами файлы, которые не являются частью решения.
Типы файлов
Параметр Типы файлов указывает типы файлов для поиска в каталогах Искать в. Выберите любой элемент в списке, чтобы ввести заранее заданную строку для поиска указанных типов файлов.
Можно выполнить поиск нескольких типов файлов, разделяя их точкой с запятой ( ; ). Можно также исключить папки и файлы, поставив перед любым путем или типом файла восклицательный знак ( ! ).
Добавить результаты
Используйте этот параметр, чтобы добавить результаты текущего поиска к результатам предыдущего.
поле поиска;
Чтобы найти новую текстовую строку или выражение, введите их в поле "Поиск". Для поиска любой из 20 строк, которые вы искали недавно, откройте раскрывающийся список и выберите нужную строку.
Можно выбрать или отключить указанные ниже параметры.
Учитывать регистр. Если выбрать этот параметр, поиск будет выполняться с учетом регистра.
Слово целиком. Если выбрать этот параметр, в результатах поиска будут только полностью совпадающие слова.
Использовать регулярные выражения. Этот параметр позволяет применять специальные обозначения, чтобы определить шаблоны текста для поиска соответствия в текстовых полях "Найти" или Заменить. Список этих обозначений см. в статье Использование регулярных выражений в Visual Studio.
Кнопка Построитель выражений отображается рядом с полем поиска, только если установлен флажок Использовать регулярные выражения.
Искать в
Пункт, выбранный в раскрывающемся списке Искать в, определяет, будет ли функция Найти в файлах выполнять поиск по всей рабочей области, по всему решению, по текущему проекту, текущему каталогу, всем открытым документам или текущему документу.
Можно также нажать рядом кнопку Обзор (. ) , чтобы выбрать место для поиска. Более того, если вы уже указали каталог, нажатие этой кнопки не заменяет каталог, а добавляет новый. Например, если для параметра "Где искать" задано значение .\Code, можно нажать кнопку Обзор (. ) и перейти в папку с именем Shared Code. Теперь в поле Обзор (. ) будут отображаться папки .\Code и .\Shared Code. При выполнении команды "Найти" поиск будет выполняться в обеих этих папках.
Чтобы уточнить условия поиска, можно выбрать следующие параметры (или отменить их выбор):
- Include external items (Включить внешние элементы). Этот параметр позволяет включить внешние элементы, такие как "windows.h", на которые можно добавить ссылку, но которые не являются частью решения.
- Include miscellaneous files (Включить прочие файлы). Этот параметр позволяет включить прочие файлы, например открытые вами файлы, которые не являются частью решения.
Типы файлов
Параметр Типы файлов указывает типы файлов для поиска в каталогах Искать в. Выберите любой элемент в списке, чтобы ввести заранее заданную строку для поиска указанных типов файлов.
Можно выполнить поиск нескольких типов файлов, разделяя их точкой с запятой ( ; ). Можно также исключить папки и файлы, поставив перед любым путем или типом файла восклицательный знак ( ! ).
Добавить результаты
Используйте этот параметр, чтобы добавить результаты текущего поиска к результатам предыдущего.
Построитель выражений
Если в строке поиска нужно использовать регулярные выражения, нажмите рядом с полем поиска кнопку Построитель выражений. Дополнительные сведения см. в статье Использование регулярных выражений в Visual Studio.
Кнопка Построитель выражений включена, только если вы выбрали параметр Использовать регулярные выражения в области Параметры поиска.
Искать в
Этот параметр выбирается из раскрывающегося списка Искать в и определяет, будут ли команды Найти в файлах выполнять поиск только в активных в данный момент файлах или во всех файлах, сохраненных в заданной папке.
Выберите область поиска в списке или нажмите кнопку Обзор (. ), чтобы открыть диалоговое окно Выбор папок поиска и задать собственный набор каталогов. Можно также ввести путь непосредственно в поле Область поиска.
При выборе параметров Все решение или Текущий проект поиск в файлах проектов и решений не выполняется. Если вам требуется найти что-нибудь в файлах проекта, выберите папку поиска.
Если вы используете параметр Искать в для поиска файла, извлеченного из системы управления исходным кодом, найдена будет только версия файла, скачанная на локальный компьютер.
Включая вложенные папки
Указывает, что поиск будет выполняться во вложенных папках папки Область поиска.
Параметры поиска
Вы можете развернуть или свернуть раздел Параметры поиска. Можно выбрать или отключить указанные ниже параметры.
Учитывать регистр
Если этот флажок установлен, функция Результаты поиска будет учитывать регистр.
Слово целиком
Если этот флажок установлен, в окне Результаты поиска будут отображаться только полноценные соответствия слову.
Использование регулярных выражений
Если этот флажок установлен, вы можете использовать специальные обозначения, чтобы определить шаблоны текста для поиска соответствия в текстовых полях Найти или Заменить. Список этих обозначений см. в статье Использование регулярных выражений в Visual Studio.
Искать в файлах указанных типов
Этот список указывает типы файлов для поиска в каталогах Область поиска. Если это поле пусто, поиск будет выполняться по всем файлам в каталогах Область поиска.
Выберите любой элемент в списке, чтобы ввести заранее заданную строку для поиска указанных типов файлов.
Параметры результатов
Вы можете развернуть или свернуть раздел Параметры результатов. В разделе Выводить результаты в можно выбрать или отключить указанные ниже параметры.
Окно "Результаты поиска 1"
Если выбран этот параметр, результаты текущего поиска заменяют содержимое окна Результаты поиска 1. Это окно открывается автоматически и отображает результаты поиска. Чтобы открыть это окно вручную, выберите Другие окна в меню Вид и выберите Результаты поиска 1.
Окно "Результаты поиска 2"
Если выбран этот параметр, результаты текущего поиска заменяют содержимое окна Результаты поиска 2. Это окно открывается автоматически и отображает результаты поиска. Чтобы открыть окно вручную, выберите Другие окна в меню Вид и выберите Результаты поиска 2.
Между окнами результатов можно переключаться, нажимая клавиши ALT+1 или ALT+2.
Таблица результатов поиска
Результаты поиска отображаются в формате таблицы, а не в виде текстового списка.
Добавить результаты
Добавляет результаты поиска в результаты предыдущей операции поиска.
Отображать только имена файлов
Отображает список файлов, содержащих соответствия, а не сами совпадения.
Результаты поиска
При выполнении поиска результаты отображаются по мере того, как они становятся доступными.
Visual Studio начинает создавать индекс после загрузки контекста кода, например, при открытии нового проекта, изменении ветвей или изменении списка файлов. Если вы выполняете поиск, пока Visual Studio все еще индексирует исходные файлы, вы можете увидеть предупреждение о том, что результаты являются неполными.
Сохранение результатов
Вы можете сохранить результаты одной операции поиска, пока выполняете другие. Это позволяет без труда сравнивать результаты и просматривать их рядом друг с другом.
Чтобы сохранить несколько результатов поиска, нажимайте кнопку Сохранить результаты после каждой операции поиска. Затем, когда вы будете искать что-то еще, результаты отобразятся на новой вкладке. Вы можете сохранить до пяти результатов поиска. Если у вас уже есть пять результатов поиска, для следующей операции поиска будет использоваться самая старая вкладка результатов поиска.
В Visual Studio 2022 и более поздних версиях можно настроить Visual Studio на сохранение результатов. Последовательно выберите Сервис > Параметры > Общие > Поиск и замена и установите флажок Хранить результаты поиска по умолчанию.
Поиск в файлах с использованием набора параметров, доступных на вкладке Найти в файлах диалогового окна Поиск и замена.
Синтаксис
Аргументы
findwhat
Обязательный. Текст для поиска совпадения.
Коммутаторы
/case или /c
Необязательный параметр. Совпадение происходит только в том случае, если прописные и строчные знаки точно соответствуют тем, что указаны в аргументе findwhat .
/ext: extensions
Необязательный параметр. Определяет расширения файлов, в которых будет проводиться поиск. Если переключатель не определен, используется предыдущее расширение, вводившееся ранее.
/lookin: searchpath
Необязательный параметр. Каталог, в котором будет производиться поиск. Если путь содержит пробелы, необходимо заключить полный путь в кавычки.
/names или /n
Необязательный параметр. Отображает список имен файлов, содержащих совпадения.
/options или /t
Необязательный параметр. Отображает список текущих параметров поиска, но не выполняет сам поиск.
/regex или /r
Необязательный параметр. Использует стандартные специальные символы в аргументе findwhat для представления текстовых шаблонов вместо самих букв. Полный список знаков регулярных выражений см. в разделе Регулярные выражения.
/reset или /e
Необязательный параметр. Для параметров поиска возвращает их значения по умолчанию, но не выполняет сам поиск.
/stop
Необязательный параметр. Останавливает выполнение текущей активной операции поиска. Если указан аргумент /stop , остальные аргументы при поиске игнорируются. Например, чтобы остановить текущий поиск, следует ввести следующую строку:
/sub или /s
Необязательный параметр. Выполняет поиск в папках, вложенных в каталог, который указан в аргументе /lookin: searchpath .
/text2 или /2
Необязательный параметр. Отображает результаты поиска в окне "Результаты поиска 2".
/wild или /l
Необязательный параметр. Использует стандартные специальные символы в аргументе findwhat для представления символа или последовательности символов.
/word или /w
Необязательный параметр. Выполняет поиск только целых слов.
Пример
В данном примере осуществляется поиск "btnCancel" во всех CLS-файлах, расположенных в папке My Visual Studio Projects, а в окне "Результаты поиска 2" отображаются сведения о найденных совпадениях.
Короче, проблема в том, что не получается попадать в другие диски и папки(выше чем лежит исполняемый файл).
И вообще сильное ощущение, что написана функция очень криво и не правильно. Подскажите как бы ее переписать корректно
1 ответ 1
Обратите внимание на следующие моменты:
Во-первых, неправильно используется функция SetCurrentDirectory(), что чревато дальнейшими ошибками по мере роста кода программы. Дело в том, что текущий каталог - это глобальная переменная процесса и изменять ее таким образом, в одной из рабочих функций, и тем более - не восстанавливать - некорректная практика. Если имеем дело с многопоточным приложением и в разных потоках используются файловые операции (а как правило в больших программах именно так и происходит - ведутся протоколы, логи, багрепорты, считываются/записываются опции и т.п.), то хаотичное изменение текущего каталога недопустимо. Если эта функция используется, то обычно в момент инициализации программы при запуске и большинство (если не все) файловых операций осуществляются по относительным путям (относительно текущего).
Поэтому рекомендую убрать из функции вызов SetCurrentDirectory() и передавать на вход функции Search_File() полный путь + маска искомого файла (помним, что в FindFirstFile() можно использовать символы * и ?) или образовывать этот полный путь динамически путем присоединения внутри функции mas[] к buffer.
Во-вторых, в определенных случаях (когда целевое имя содержит подстановочные символы, точку или имя каталога) необходимо иметь права доступа к корневому каталогу и ко всем подкаталогам в поисковом пути для успешного поиска.
В том смысле, что полный путь поиска формируется прямо в функции Search_File() из mas[] и buffer на ее входах: 1) либо добавляем буфер памяти, который использует функция для сцепления строк, при необходимости увеличивая/уменьшая его размер; 2) либо передаем buffer с запасом свободного места в конце, чтобы в него можно прицепить mas[], а после окончания поиска снова обрезать, записав нулевой символ
Читайте также: