我正在尝试让我的C ++程序打开一个现有的Excel电子表格(以及一堆应用程序),但是它会一直返回一个文件不存在的错误。我使用以下代码:
int main(){
system("open ~/path/file");
//--open applications using same command--//
}
该文件肯定存在,此命令可以打开所有应用程序,所以我不确定我做错了什么。
提前致谢!!
答案 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
。