代码之家  ›  专栏  ›  技术社区  ›  char m

当两个路径都有空格时,如何用C程序中的文件启动外部程序?

  •  1
  • char m  · 技术社区  · 14 年前

    我正在尝试用VS2005修复一个现有的C程序,它最终会调用

    int system(command) //in C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\system.c)
    

    start C:\Program Files\VideoLAN\VLC\vlc.exe C:\Documents and Settings\me\My Documents\My Music\09 - Track09.mp3
    

    要启动的程序和文件名路径都是由获得的env变量构成的,并且命令start附加到char buffer的start。环境变量包括:

    • %VLCPATH% 有价值的 C:\Program Files\VideoLAN\VLC

    • %MUSIC% C:\Documents and Settings\me\My Documents\My Music

    我已经用XP命令提示符尝试过了,当路径没有空格时,一切都正常。这同样有效:

    "%VLCPATH%\vlc.exe" "%MUSIC%\09 - Track09.mp3"
    

    那我该怎么办?

    1. 编辑env变量以使用引号(别这么想)
    2 回复  |  直到 14 年前
        1
  •  2
  •   Jonathan Leffler    14 年前

    我会尝试引用所有参数,例如:

    int main(int argc, char *argv[])
    {
      char command[1024];
      char *title = "test vlc";
      char *executable = "vlc.exe";
      char *param = "09 - Track09.mp3";
    
      snprintf(command, sizeof(command), "start \"%s\" \"%s\" \"%s\"",
               title, executable, param);
      printf("%s\n", command);
      system(command);
    
      return EXIT_SUCCESS;
    }
    

    显然,替换可执行文件和参数为,但您确定您的可执行文件和参数。

        2
  •  1
  •   Peladao    14 年前

    例如:

    “C:\Program Files\VideoLAN\VLC”\vlc.exe“”C:\Documents and Settings\me\My Documents\My Music\09-Track09.mp3“