这与:How do I read the results of a system() call in C++? 有关
我正在尝试做完全相同的事情,只是我的程序需要将“带空格的多个参数”传递给命令。我需要命令行输出和进程的退出代码。
示例:Textpad 的示例。我真正使用的应用程序在 stdout 上打印内容。
string command1 = "\"C:\Program Files\TextPad 5\Textpad.exe\" C:\readme0.txt";
string command2 = "\"C:\Program Files\TextPad 5\Textpad.exe\" \"C:\read me2.txt\"";
cout << system(command1.c_str()) << endl;
cout << system(command1.c_str()) << endl;
输出:
0 'C:\Program' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
对系统的第一次调用通过,第二次调用失败并出现上述错误。 Windows 中的 _popen 在 Windows 上的工作方式类似,因此没有帮助。我可以在 Linux 上轻松执行此操作,因为我可以转义参数中的空格而无需使用引号。
另一种方法是编写大量非跨平台代码,如下所示: http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx
但如果我想避免这种情况,在 Windows 上是否有 system() 和 _popen() 的替代方案?
谢谢!
最佳答案
_popen() 和 system() 使用的最低级别 Windows API 函数是 CreateProcess()。
但是 CreateProcess() 使用起来并不那么简单 - 特别是当您想要获取进程的输出或写入进程的输入时。
CreateProcess() 肯定会处理包含空格字符的文件名(只要按照您的方式将它们写在引号中)。
https://stackoverflow.com/questions/535043/