Mac平台Objective-C将HFS路径转为POSIX路径时为何出现工作目录前缀异常?
解决HFS路径转POSIX路径时错误添加工作目录前缀的问题
嘿,我一眼就看出问题出在哪了——你用错了路径风格参数!
你现在的代码里用kCFURLPOSIXPathStyle解析HFS格式的路径(就是那种冒号分隔的路径,比如Macintosh HD:Users:gautam:code:Help:),但这个参数是专门用来处理斜杠分隔的POSIX路径的。系统根本没法识别这个HFS路径,只能把它当成相对路径,所以才会把它拼到当前工作目录后面,生成了那个不伦不类的混合路径。
正确的做法:用kCFURLHFSPathStyle解析HFS路径
把路径风格参数改成对应HFS的选项,再调整一下目录标识的参数(你的路径结尾带冒号,说明是目录),代码就能正常工作了:
NSString *hfsPath = @"Macintosh HD:Users:gautam:code:Help:"; if (CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)hfsPath, kCFURLHFSPathStyle, true)) { NSString *posixPath = [(__bridge NSURL*)url path]; // 现在posixPath会是正确的"/Users/gautam/code/Help/" const char *posixCString = [posixPath UTF8String]; CFRelease(url); // 别忘了释放CF创建的对象,避免内存泄漏 }
额外提醒两点:
- 最后一个参数
isDirectory:如果你的HFS路径结尾带冒号,一定要设为true;如果是文件路径(没有结尾冒号),就设为false,这样解析出来的路径才准确。 - 内存管理:所有
CFURLCreate开头的函数创建的对象,都需要手动调用CFRelease释放,不然会造成内存泄漏。
内容的提问来源于stack exchange,提问作者g-217
相关产品推荐
相关产品推荐

