【问题标题】:Opening excel files with system( ) on mac?在mac上用system()打开excel文件?
【发布时间】:2014-08-18 17:14:06
【问题描述】:

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

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

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

提前致谢!!

【问题讨论】:

    标签: c++ macos system


    【解决方案1】:

    很可能,/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); };
    

    因为 interactive shell 通常将~ 扩展为$HOME,而HOME 通常是一个环境变量。

    (对于 C++,您可以使用 std::string 操作而不是 snprintf

    我的snprintf + system 技巧根本不是万无一失的。如果$HOME 包含空格或奇怪的字符,如;',它将不起作用。 snprintf 本身可能会失败(例如,因为 $HOME 很大)。

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

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

    【讨论】:

    • 嘿,巴西尔。你的建议很有效!感谢您抽出宝贵时间提供帮助:D
    猜你喜欢
    • 2012-09-03
    • 2020-01-14
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2020-08-24
    • 2011-06-26
    相关资源
    最近更新 更多