gpt4 book ai didi

macos - CFBundleCopyExecutableURL 不返回绝对 URL

转载 作者:行者123 更新时间:2023-12-03 16:20:32 27 4
gpt4 key购买 nike

CFBundleCopyExecutableURL 函数有时返回绝对 URL,有时则不返回。如果在 CFBundleCopyExecutableURL 之前调用 CFBundleCopyExecutableArchitectures,则 url 是绝对的(为什么?)。如何强制此函数始终返回绝对 URL?谢谢。

text getBundleExeutableUrl(text bundlePath)
{
CFURLRef url = CFURLCreateFromFileSystemRepresentation(0,
(char*)bundlePath.c_str(), bundlePath.length(), false);
CFBundleRef bundle = CFBundleCreate(0, url);
CFBundleCopyExecutableArchitectures(bundle); // this is necessary to get absolute path
CFURLRef exeUrl = CFBundleCopyExecutableURL(bundle);
CFStringRef srExe = CFURLCopyFileSystemPath(exeUrl, 0);
text bundleExe = srExe;
CFRelease(srExe);
CFRelease(exeUrl);
CFRelease(url);
CFRelease(bundle);
return bundleExe;
}

最佳答案

在源代码中,添加引用 CFURLCopyAbsoluteURL 的额外行

CFURLRef exeUrl = CFBundleCopyExecutableURL(bundle);
CFURLRef absoluteURL = CFURLCopyAbsoluteURL(exeURL);
CFStringRef srExe = CFURLCopyFileSystemPath(absoluteURL, 0);
CFRelease(absoluteURL); // don't forget to release what you create

CFURLCopyAbsoluteURL”会将相对 URL 转换为绝对 URL。

您的代码中可能还应该有一些错误检查行(例如,在继续之前确保 URL 不为 NULL,等等)。

此外,我想提到的一个风格是对象和变量声明(例如“text”)通常是大写的(例如“CFStringRef”、“NSString”等)。参数和变量名称以小写开头。另外,“text”也很令人困惑。只需将其称为“CFStringRef”即可。

关于macos - CFBundleCopyExecutableURL 不返回绝对 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978512/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com