我有这个Windows控制台应用程序,它接受一个文件,做一些计算,然后将输出写入指定的文件。输入以“app.exe -input fullfilename”格式指定。我需要从我的C ++程序中调用此应用程序,但是在文件路径中存在空格问题。当我通过键入直接从cmd.exe调用应用程序时(为了清楚起见未指定输出文件)
"c:\first path\app.exe" -input "c:\second path\input.file"
一切都按预期工作。但是,当我尝试使用cstdlib std :: system()函数时,即
std::system(" \"c:\\first path\\app.exe\" -input \"c:\\second path\\input.file\" ");
控制台打印出c:\ first不是任何有效命令。这可能是常见的错误并且有简单的解决方案,但我一直无法找到。感谢任何帮助。
答案 0 :(得分:1)
而不是std :: system(),您应该使用Windows API中的_wspawnv函数。如果要在PATH中搜索程序,请使用_wspawnvp,而不是指定它的完整路径。
#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);
如果您100%确定您的输入文件名永远不会包含除ASCII以外的任何内容,您也可以使用_spawnv / _spawnvp。
答案 1 :(得分:0)
不要试图将引号放在std :: system()调用中。请尝试以下方法:
std::system("c:\\first\\ path\\app.exe -input c:\\second\\ path\\input.file");