mac平台获取app路径

原本只是为了在mac平台简单地调用fopen、fwrite等函数,发现fopen需要包含绝对路径,才能正常使用;否则,即使调试时可以创建文件,直接调用app执行时,文件不会被创建。

为此,需要获取执行文件的绝对路径。用到函数_NSGetExecutablePath。这个函数获取的路径是app包里的执行文件的路径,直接在后面加上‘/../../../../‘到app路径也是不行的,大概是访问权限的问题,会导致fopen失败。

所以先将获取的路径处理一下,得到app路径,再在fopen中调用,经证实是OK的。

代码如下:

// get app path.
#include <mach-o/dyld.h>
char g_path[MAXPATHLEN+1];
- (void)getAppPath
{
    uint32_t size = sizeof(g_path);
    if (_NSGetExecutablePath(g_path, &size) == 0)
        printf("executable path is %s\n", g_path);
    else
        printf("buffer too small; need size %u\n", size);
    
    // /Users/blade/proj//Output/MacOS/bin/TestTool.app/Contents/MacOS/TestTool
    
    if(strlen(g_path))
    {
        int end,count = 0;
        for(int i = strlen(g_path) - 1; i>0; i--)
        {
            if(g_path[i] == '/')
            {
                count++;
            }
            if(count == 4)
            {
                end = i;
                break;
            }
        }
        if(end > 0)
        {
            memset(g_path+end,0,strlen(g_path)-end);
        }
    }
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。