popen и система работает неожиданно с несколькими путями в кавычках - PullRequest
0 голосов
/ 27 июня 2011

Я пытаюсь выполнить команду dos из моей программы на C ++, однако, как только я добавляю кавычки в выходной путь файла (перенаправления), команда больше не выполняется и мгновенно возвращается. Ниже приведен пример пути без пробелов, но, поскольку пути могут иметь пробелы и, следовательно, они должны быть заключены в кавычки для оболочки, чтобы правильно ее понять, мне нужно решить эту дилемму - и я пытаюсь сначала разобраться с простейшим случаем.

т.е.

следующие РАБОТЫ :

sprintf(exec_cmd,"\"C:/MySQL Server 5.5/bin/mysqldump.exe\" -u%s -p%s %s > C:/backup.bak",user,password,db_name);
system(exec_cmd);

Следующее НЕ работает (обратите внимание на кавычки вокруг вывода):

sprintf(exec_cmd,"\"C:/MySQL Server 5.5/bin/mysqldump.exe\" -u%s -p%s %s > \"C:/backup.bak\"",user,password,db_name);
system(exec_cmd);

Я предполагаю, что это где-то задыхается. Я попробовал тот же exec_cmd в popen, но безрезультатно.

Любая помощь / совет с благодарностью.

1 Ответ

0 голосов
/ 27 июня 2011

Не думаю, что ваша оболочка (cmd.exe) позволяет перенаправлять имя файла с пробелами. Я не мог заставить command.com из DOS 6.22 принять его (у меня нет cmd.exe поблизости для тестирования).

В любом случае, вы можете использовать опцию --result-file, чтобы передать перенаправление самой команде.

mysqldump ... --result-file="file name" ...
...