我试图通过我的c ++代码运行enfuse来为hdr融合一些图像。我的代码基本上是这样的:
std::string cmd=getCmd();
system(cmd.c_str());
getcmd将返回如下字符串:
"C:\code\Debug\enfuse" --hard-mask "C:\Users\m\AppData\Local\Temp\pp\0-0.jpg" "C:\Users\m\AppData\Local\Temp\pp\1-0.jpg " "C:\Users\m\AppData\Local\Temp\pp\2-0.jpg " "C:\Users\m\AppData\Local\Temp\pp\3-0.jpg " "C:\Users\m\AppData\Local\Temp\pp\4-0.jpg " -o "C:\Users\m\AppData\Local\Temp\pp\0fuse.tif"
当我使用上面的代码运行此字符串时,我收到此错误:
The filename, directory name, or volume label syntax is incorrect.
但是如果我复制字符串并将其粘贴到命令窗口中,那么它运行良好没有任何问题。
我检查过并发现我从目录条目中删除了引号然后它运行良好,但是如果我删除了引号,那么如果路径有空格,则命令字符串是错误的并且它不起作用。
为什么这个命令在命令窗口上运行良好,但不能使用系统?
我正在开发Windows,但这段代码应该是独立于平台的,我应该可以在Linux上编译它。
我注意到在字符串的某些部分引用之前有一个空格,因此我删除它们并且字符串变为:
"C:\code\Debug\enfuse" --hard-mask "C:\Users\m\AppData\Local\Temp\pp\0-0.jpg" "C:\Users\m\AppData\Local\Temp\pp\1-0.jpg" "C:\Users\m\AppData\Local\Temp\pp\2-0.jpg" "C:\Users\m\AppData\Local\Temp\pp\3-0.jpg" "C:\Users\m\AppData\Local\Temp\pp\4-0.jpg" -o "C:\Users\m\AppData\Local\Temp\pp\0fuse.tif"
这个字符串在复制到cmd窗口时运行良好但是当我通过系统调用运行它时,我收到此错误:
The input line is too long.