gpt4 book ai didi

c++ - 即使路径为空白,如何使用 _popen 列出目录?

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:44 24 4
gpt4 key购买 nike

这是我在 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 它仍然不起作用。

请给我一些建议。

最佳答案

您需要用引号将传递给 dir 的参数括起来,否则底层 shell 会将空格视为参数分隔符。

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

目前 "dir %s" 将扩展到 dir c:\program files,就像你有 dir "c:\程序""文件"; IE。两个参数,而不是一个。

如果您打开 cmd 并写入以下内容,您应该会在您选择的目录中看到这些文件:

cmd "c:\program files"

注意:当您使用sprintf 时要小心,如果cur_dir 足够长,您就有可能在目录[MAX_PATH]。相反,请考虑使用更安全的 snprintf,它要求您指定内容的最大长度:snprintf (dir, MAX_PATH, "dir\"%s\"", cur_dir);

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

关于c++ - 即使路径为空白,如何使用 _popen 列出目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com