【问题标题】:system() cant run my program because space [duplicate]system() 无法运行我的程序,因为空间 [重复]
【发布时间】:2020-09-14 21:54:59
【问题描述】:

我想运行我的程序 所以我做了这个程序:

string zpath1, zpath2, zpath3, zpath3;
        zpath1 = "C:\\Users\\";
        zpath2 = zpath1 + getenv("USERNAME");
        zpath3 = zpath2 + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ConsoleApplication23.exe";
system(zpath3.c_str());

但我遇到了问题 'c:\User\adrian\AppData\Roaming\Microsoft\Windows\Start' 不知道...

所以我的问题是“开始菜单”之间的空格

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 请注意,像这样的硬编码路径是错误的。请改用SHGetFolderPath(CSIDL_STARTUP) 或SHGetKnownFolderPath(FOLDERID_Startup)。至于空格问题,您可以 1) 在路径周围添加额外的引号字符,或者您可以使用 GetShortPathName() 将路径转换为其简短的 8.3 版本(其中不会有任何空格)

标签: c++


【解决方案1】:

有三种可能的解决方案,两种引号或转义空格字符中的一种

zpath1 = "'C:\\Users\\";
//        ^
zpath3 = zpath2 + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ConsoleApplication23.exe'";
//                                                                                                                ^
zpath1 = "\"C:\\Users\\";
//        ^^
zpath3 = zpath2 + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ConsoleApplication23.exe\"";
//                                                                                                                ^^
zpath3 = zpath2 + "\\AppData\\Roaming\\Microsoft\\Windows\\Start^ Menu\\Programs\\Startup\\ConsoleApplication23.exe";
//                                                              ^

感谢@Eljay。由于反斜杠 \ 在 Windows 中用作路径组件分隔符,因此不能用作转义字符,因此在 Windows 命令提示符中将护理符号 ^ 用作转义字符。

【讨论】:

  • zpath3 不是在路径中转义空格的方法,因为反斜杠是路径组件分隔符。
  • 不工作:/它说命令行不存在:/
  • 您尝试过三个选项中的哪一个?如果是前两个,你应该把第一个引号移到zpath1。
猜你喜欢
  • 2015-08-07
  • 2021-06-20
  • 1970-01-01
  • 2014-02-12
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多