2010-06-08 3 views
5

У меня есть это консольное приложение для Windows, которое берет файл, выполняет некоторые вычисления и затем записывает вывод в указанный файл. Ввод указан в формате «app.exe -input fullfilename». Мне нужно вызвать это приложение из моей программы на C++, но у меня есть проблема с пробелами в пути к файлам. Когда я называю приложение непосредственно из cmd.exe, введя (без указания выходного файла для ясности)Как передать параметры с пробелами через систему cstdlib

"c:\first path\app.exe" -input "c:\second path\input.file" 

все работает, как ожидалось. Но, когда я пытаюсь с помощью cstdlib зОго :: системы() функции, т.е.

std::system(" \"c:\\first path\\app.exe\" -input \"c:\\second path\\input.file\" "); 

консоли печатает, что C: \ первая не любая допустимая команда. Вероятно, это распространенная ошибка и имеет простое решение, но я не смог ее найти. Thx для любой помощи.

+0

Вы тоже пытались избежать пробелов? – Troubadour

+0

В системах UNIX ответственность за это лежит на оболочке, и она должна работать. Я не уверен, кто несет ответственность за Windows, но я уверен, что имеет значение, используете ли вы MSVC++ или MinGW или Cygwin. Не могли бы вы рассказать нам, какой компилятор вы используете? –

+0

Это похоже на работу, но не уверен, почему: 'std :: system (" \ "\" c: \\ first path \\ app.exe \ "-input \" c: \\ второй путь \\ input.file \ "\" ");' – Naveen

ответ

0

Не пытайтесь помещать кавычки в вызов std :: system(). Попробуйте следующее:

std::system("c:\\first\\ path\\app.exe -input c:\\second\\ path\\input.file"); 
1

Вместо зЬй :: системы(), вы должны использовать функцию _wspawnv из Windows API. Используйте _wspawnvp, если вы хотите искать программу в PATH, а не указывать полный путь к ней.

 
#include <stdio.h> 
#include <wchar.h> 
... 
const WCHAR *app = L"C:\\path to\\first app.exe"; 
const WCHAR *argv[] = {app, L"-input", L"c:\\second path\\input file.txt"}; 
_wpspawnv(_P_WAIT, app, argv); 

Вы также можете использовать _spawnv/_spawnvp если вы 100% уверены, что ваш вход имя файла не будет никогда, никогда не содержат ничего, кроме ASCII.