2010-06-08 6 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\" "); 

이 다 밖으로 콘솔 인쇄 : \ 첫번째 유효한 명령이 아닙니다. 아마 일반적인 실수 일 뿐이지 만 간단한 해결책이 있지만 아무 것도 찾을 수 없습니다. 어떤 도움을 Thx.

+0

공간을 이스케이프 처리해 보셨습니까? – Troubadour

+0

UNIX 시스템에서 이것은 쉘의 책임이며 작동해야합니다. Windows에서 누가 그 책임을 맡고 있는지 확실하지 않지만 MSVC++ 또는 MinGW 또는 Cygwin 중 어떤 것을 사용하든 차이가 있습니다. 어떤 컴파일러를 사용하고 있는지 말해 줄 수 있습니까? –

+0

이것은 왜 작동하는지 모르지만 다음과 같은 이유 때문일 수 있습니다 :'std :: system ("\"\ "c : \\ 첫 번째 경로 \\ app.exe \"-input \ "c : \\ 두 번째 경로 \\ input.file \ "\" "); ' – Naveen

답변

0

std :: system() 호출에 따옴표를 넣지 마십시오. 다음을 시도하십시오.

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

std :: system() 대신 Windows API에서 _wspawnv 함수를 사용해야합니다. 전체 경로를 지정하는 대신 PATH에서 프로그램을 검색하려면 _wspawnvp를 사용하십시오. 당신이 당신의 입력 파일 이름, 지금까지 ASCII보다 다른 것을 포함하지 않을 것이라고 100 % 확신하는 경우

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

또한/_spawnvp을 _spawnv 사용할 수 있습니다.

관련 문제