2010-06-01 1 views
10

У меня есть приложение, построенное с компилятором MinGW C++, который работает что-то вроде Grep - acommand выглядит примерно так:подстановка с MinGW на Windows,

myapp -e '.*' *.txt 

где вещь, которая приходит после -e переключателя является регулярным выражением , а вещь после этого - шаблон имени файла. Кажется, что MinGW автоматически расширяет (globs в терминах UNIX) командную строку, поэтому мое регулярное выражение получает искалеченное. Я могу отключить это поведение, установив глобальную переменную _CRT_glob равной нулю. Это будет хорошо для bash и других разумных пользователей оболочки, так как оболочка расширит шаблон файла. Однако для пользователей MS cmd.exe мне кажется, что мне придется развернуть файл.

Так что мой вопрос - кто-нибудь знает библиотеку globbing (или объект в MinGW), чтобы сделать частично расширение командной строки? Я знаю о функции _setargv для Windows CRT, но это расширяет полную командную строку. Обратите внимание, что я видел this question, но на самом деле это не касается частичного расширения.

Я закончил использовать условную компиляцию, чтобы написать свой собственный код подстановки для Windows-версии моего приложения. Это было довольно легко, так как у меня есть собственный класс CommandLine, который инкапсулирует argc и argv из main(). Тем не менее, мне было бы интересно услышать о других решениях.

+1

Странные, помещая кавычки вокруг вашего регулярного выражения, должны препятствовать поглаживанию. –

+0

@Brian Это предотвращает подталкивание оболочки (скажем, bash), но bash удаляет кавычки и передает их в мое приложение, которое затем выполняет еще один раунд глотания. – 2010-06-01 15:24:46

+1

Думаю, я не последую за этим. Если ваше приложение получает '. *' В argc/argv, то в чем проблема? –

ответ

2

<glob.h> имеет glob и globfree и множество флагов для glob.

+4

Не входит в MinGW, к сожалению. – 2010-06-01 16:16:42

+1

Появляется glob.h сейчас является частью MinGW. – Qix

0

Я не уверен, что я полностью понимаю вашу проблему здесь, но в Windows вы сможете глотать с помощью функций FindFirstFile/FindNextFile из WIN32 API. Честно говоря, я не знаю, сопоставимы ли их возможности глобуса с glob(), но вы можете дать им попробовать

 Смежные вопросы

  • Нет связанных вопросов^_^