Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отделение параметров

499
27 мая 2005 года
madjahed
149 / / 14.01.2004
Как можно с большой вероятностью (по крайней мере)
или 100% отделить параметры .ехе файла от самого имени файла ? Например как в строке "C:\Windows\cmd.exe -help" отделить "C:\Windows\cmd.exe" от "-help" ?
425
31 мая 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by madjahed
Как можно с большой вероятностью (по крайней мере)
или 100% отделить параметры .ехе файла от самого имени файла ? Например как в строке "C:\Windows\cmd.exe -help" отделить "C:\Windows\cmd.exe" от "-help" ?

Мне кажется, это легко.

Если в пути файла есть пробелы или специальные символы, то он должен быть заключён в кавычки или апострофы. Значит, анализируем командную строку так.

 
Код:
if первый символ равен " или '
then ищем второй такой же;
    Всё, что после — параметры;
else
    Ищем пробел;
    Всё, что после него — параметры
Или я что-то не понимаю?
488
02 июня 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by sq_deep
Мне кажется, это легко.

А не проще найти ".exe " в строке?

425
03 июня 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by Mоngооsе
А не проще найти ".exe " в строке?

Можно и ".exe" поискать, но проше не получится. Всё равно придётся анализировать синтаксис, а то выйдут неувязки в следующих случаях:
1. если запускается не exe, а com, bat и пр.
2. если программа имеет имя xxx.executor.exe
3. если путь содержит ".exe"
...

488
03 июня 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by sq_deep
Можно и ".exe" поискать, но проше не получится. Всё равно придётся анализировать синтаксис, а то выйдут неувязки в следующих случаях:
1. если запускается не exe, а com, bat и пр.
2. если программа имеет имя xxx.executor.exe
3. если путь содержит ".exe"
...

Вы не заметили. В конце ".exe " стоит пробел.

 
Код:
char *lcCmd; // командная строка
char *lcPos = NULL; //указ.на возм.нач.параметров
char *lcBuf = strstr(lcCmd, ".exe ");
while(lcBuf!=NULL)
{
  lcPos = lcBuf + 5;
  lcBuf = strstr(lcPos, ".exe ");
}

425
03 июня 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by Mоngооsе
Вы не заметили. В конце ".exe " стоит пробел.
 
Код:
char *lcCmd; // командная строка
char *lcPos = NULL; //указ.на возм.нач.параметров
char *lcBuf = strstr(lcCmd, ".exe ");
while(lcBuf!=NULL)
{
  lcPos = lcBuf + 5;
  lcBuf = strstr(lcPos, ".exe ");
}

Любите же вы спорить, Mоngооsе ;) Там ещё может быть апостроф или кавычка, так что мы всё равно приходим к моему случаю... А ваш цикл будет неправильно работать со строкой
xxx.exe <параметры> yyy.exe <ещё параметры>

488
03 июня 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by sq_deep
Любите же вы спорить, Mоngооsе ;) Там ещё может быть апостроф или кавычка, так что мы всё равно приходим к моему случаю... А ваш цикл будет неправильно работать со строкой
xxx.exe <параметры> yyy.exe <ещё параметры>

Может я люблю спорить, но в отличие от некоторых, я признаю, если не прав, и не вешаю лапшу науши. Меня смутил первый пункт Вашего алгоритма. Типа, если путь содержит спец.символы, тогда он заключается в кавычки. Теперь посмотрел. Неправильный второй пункт. Он лишний. Путь с именем файла всегда заключается в кавычки, если получаем его через GetCommandLine() (VisualC).

 
Код:
char *lcPars = strchr(GetCommandLine()+1, 34) + 1;
lcPars указывает на начало параметров или на NULL.
425
03 июня 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by Mоngооsе
Может я люблю спорить, но в отличие от некоторых, я признаю, если не прав, и не вешаю лапшу науши. Меня смутил первый пункт Вашего алгоритма. Типа, если путь содержит спец.символы, тогда он заключается в кавычки. Теперь посмотрел. Неправильный второй пункт. Он лишний. Путь с именем файла всегда заключается в кавычки, если получаем его через GetCommandLine() (VisualC).
 
Код:
char *lcPars = strchr(GetCommandLine()+1, 34) + 1;
lcPars указывает на начало параметров или на NULL.

Ну давайте, давайте, давайте поспорим ещё :)

А если не через GetCommandLine, тогда что? А если чарез CWinApp::m_lpCmdLine? А если через PSP? А если через параметр WinMain(,,szCmdLine...)? А если программа на бейсике? А если на .NET?..


PS особенно вдохновляет ваше упоминание о лапше... «я могу что угодно приготовить, а они всё просят доширак»...

488
03 июня 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by sq_deep
Ну давайте, давайте, давайте поспорим ещё :)

А если не через GetCommandLine, тогда что? А если чарез CWinApp::m_lpCmdLine? А если через PSP? А если через параметр WinMain(,,szCmdLine...)? А если программа на бейсике? А если на .NET?..
PS особенно вдохновляет ваше упоминание о лапше... «я могу что угодно приготовить, а они всё просят доширак»...

А это уже из области флюда. Такой спор не для меня. А на счет лапши, я имел в виду не Вас.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог