popen和system使用多个带引号的文件路径意外行为

时间:2011-06-27 17:11:32

标签: c++ system popen

我正在尝试从我的C ++程序中执行dos命令,但是当我向输出文件路径(重定向)添加引号时,该命令不再被执行并立即返回。我在下面展示了一个没有空格的路径示例,但由于路径可能有空格,因此引用shell以便正确理解它我需要解决这个难题 - 而我正试图让最简单的情况首先工作。

以下工作

sprintf(exec_cmd,"\"C:/MySQL Server 5.5/bin/mysqldump.exe\" -u%s -p%s %s > C:/backup.bak",user,password,db_name);
system(exec_cmd);

以下 NOT 工作(注意输出周围的引号):

sprintf(exec_cmd,"\"C:/MySQL Server 5.5/bin/mysqldump.exe\" -u%s -p%s %s > \"C:/backup.bak\"",user,password,db_name);
system(exec_cmd);

我猜它在某处窒息。我在popen尝试了相同的“exec_cmd”但无济于事。

非常感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

我认为你的shell(cmd.exe)不允许重定向到带空格的文件名。我无法让我的command.com从DOS 6.22接受它(我附近没有cmd.exe来测试)。

无论如何,您可以使用--result-file选项将重定向传递给命令本身。

mysqldump ... --result-file="file name" ...