2010-06-08 5 views
5

Mam tę aplikację konsoli Windows, która pobiera plik, wykonuje pewne obliczenia, a następnie zapisuje dane wyjściowe do określonego pliku. Dane wejściowe są określone w formacie "app.exe -input fullfilename". Muszę wywołać tę aplikację z mojego programu C++, ale mam problem ze spacjami w ścieżkach do plików. Gdy zadzwonię do aplikacji bezpośrednio z programu cmd.exe, wpisując (bez określenia pliku wyjściowego dla jasności):Jak przekazywać parametry ze spacjami poprzez system cstdlib

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

wszystko działa zgodnie z oczekiwaniami. Ale gdy próbuję za pomocą cstdlib std :: System function(), tj

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

drukuje konsoli uwagę, że c: \ pierwszy nie jest jakaś ważna komenda. To prawdopodobnie typowy błąd i proste rozwiązanie, ale nie udało mi się znaleźć żadnego. Thx za pomoc.

+0

Czy próbowałeś również uciec z przestrzeni? – Troubadour

+0

W systemach UNIX jest to odpowiedzialność powłoki i powinna działać. Nie jestem pewien, kto ma tę odpowiedzialność w Windows, ale założę się, że robi różnicę, czy używasz MSVC++ lub MinGW lub Cygwin. Czy możesz nam powiedzieć, z jakiego kompilatora korzystasz? –

+0

To wydaje się działać, nie wiem dlaczego: 'std :: system (" \ "\" c: \\ pierwsza ścieżka \\ app.exe \ "-input \" c: \\ druga ścieżka \\ input.file \ "\" ");' – Naveen

Odpowiedz

0

Nie próbuj umieszczać cytatów w wywołaniu std :: system(). Wypróbuj następujące:

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

Zamiast std :: system(), powinieneś użyć funkcji _wspawnv z Windows API. Użyj _wspawnvp, jeśli chcesz wyszukać program w PATH, zamiast określać pełną ścieżkę do niego.

 
#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); 

Można również użyć _spawnv/_spawnvp jeśli jesteś w 100% pewien, że nazwa pliku wejściowego będzie nigdy, przenigdy nie zawierają niczego innego niż ASCII.