用mac上的system()打开excel文件?

时间:2014-08-18 17:14:07

标签: c++ macos system

我正在尝试让我的C ++程序打开一个现有的Excel电子表格(以及一堆应用程序),但是它会一直返回一个文件不存在的错误。我使用以下代码:

int main(){
    system("open ~/path/file");
    //--open applications using same command--//
}

该文件肯定存在,此命令可以打开所有应用程序,所以我不确定我做错了什么。

提前致谢!!

1 个答案:

答案 0 :(得分:3)

很可能,系统/bin/sh - 根据定义由system(3)使用 - 不会展开~

您可以尝试类似

的内容
 char cmd[256];
 snprintf(cmd, sizeof(cmd), "open %s/path/file", getenv("HOME"));
 if (0 != system(cmd)) 
   { fprintf(stderr, "%s failed\n", cmd); exit(EXIT_FAILURE); };

因为交互式 shell通常将~扩展为$HOME,而HOME通常是环境变量。

(使用C ++,您可以使用std::string操作代替snprintf

我的snprintf + system技巧完全没有失败。如果$HOME包含空格或奇怪的字符,例如;',则无效。 snprintf本身可能会失败(例如因为$HOME很大)。

当然,在getenv("HOME")不是NULL之前,您应该更好地进行测试。如果getenv("HOME")失败,您可以getpwuid(3)使用getuid(2)返回NULL

在Linux上,您可能需要xdg-open而不是open