如何使用_popen列出目录,即使路径有空白?

时间:2014-05-31 03:10:33

标签: c++ windows popen

这是我在visual c ++上的代码:

char dir[MAX_PATH]="";

sprintf(dir,"dir %s",cur_dir);//

FILE* cmd_dir=_popen(dir,"wt");

_pclose(cmd_dir);

如果我尝试将cur_dir设置为"c:\""c:\perl64"且没有空白,则会有效,并会列出目录中的文件。

但是,如果cur_dirc:\program files,则无效。即使我打开command.exe(windows终端)并输入dir c:\program files它仍然无法正常工作。

请给我一些建议。

2 个答案:

答案 0 :(得分:0)

您需要在引号“”中捕获路径。

sprintf(dir,"dir \"%s\"",cur_dir);

答案 1 :(得分:0)

您需要在引号中将参数包装到dir,否则底层shell会将空格视为参数分隔符。

sprintf (dir, "dir \"%s\"", cur_dir);

目前"dir %s"将扩展为dir c:\program files,这被视为您拥有dir "c:\program" "files";即。两个参数,而不是一个。

如果你打开 cmd 并写下面的内容,你应该看到你选择的目录中的文件:

cmd "c:\program files"

注意:使用sprintf时要小心,如果cur_dir足够长,则有可能超出dir[MAX_PATH]的范围。相反,请考虑使用更安全的snprintf,这需要您指定最大内容长度:snprintf (dir, MAX_PATH, "dir \"%s\"", cur_dir);

注意:此问题标记为[c++],但您的代码段没有显示C ++的迹象 - 它看起来像C." C ++的方式这样做"将包括使用std::string构建您的命令,并使用_popen致电_popen (your_string.c_str (), "wt")