【发布时间】:2013-11-18 17:15:04
【问题描述】:
我正在尝试在 C++ 程序中运行两个命令行,但遇到一个奇怪的错误。我要运行的命令行是
vlc -vvv dshow:// :dshow-vdev='USB Video Device' :dshow-adev="" :live-caching=50 :sout=#transcode{vcodec=WMV2,vb=800,acodec=wma2,ab=128,channels=2,samplerate=44100}:duplicate{dst=udp{dst=localhost:1234},dst=display} :sout-keep
vlc -vvv udp://@localhost:1234:network-caching=50
它们都在命令提示符下运行良好。但是当使用 C++ 系统 shell 调用来运行这些时,第一个失败,而第二个工作。我在 C++ 中运行这些的方式如下:
system( "\"G:/Program Files/VideoLAN/VLC/vlc\" -vvv dshow:// :dshow-vdev=\"USB Video Device\" :dshow-adev=\"none\" :live-caching=50 :sout=#transcode{vcodec=WMV2,vb=800,acodec=wma2,ab=128,channels=2,samplerate=44100}:duplicate{dst=udp{dst=localhost:1234},dst=display}:sout-keep");
system( "\"G:/Program Files/VideoLAN/VLC/vlc\" -vvv udp://@localhost:1234:network-caching=50");
第一个命令抛出错误“G:/Program 不被识别为内部或外部命令、可运行程序或批处理文件。”,这很奇怪,因为两个命令处理文件路径的方式是相同的。请让我知道原因。 计算机在 Windows XP 上运行,我使用的是 Microsoft Visual Studio 2010。
【问题讨论】:
-
在路径中的空格前添加 \。
-
但是在第二个命令的空格之前也没有 \ ,但这有效。不管怎么说,多谢拉。我要试试这个!
-
添加\也不起作用!
-
尝试将整个系统 cmd 放入一个 char* 变量中。尝试先打印字符串,然后将该变量传递给系统。这样就可以判断cmd的解析是否正确。
-
一般情况下,当您没有将路径用引号括起来以避免控制台解析“空格”的字符串分隔符时,就会出现此错误。但这在您显示的代码中似乎不是问题。
标签: c++ visual-c++ command-line command-prompt