我想以编程方式在Mac OS X中读取别名。当我尝试它时总是阅读原始文件。 知道如何做到这一点吗?
感谢您的所有建议。
答案 0 :(得分:4)
查看BDAlias。这是Alias周围很好的Cocoa包装。
答案 1 :(得分:3)
如果您使用的是10.6,那么它还会在NSURL中提供新方法来读取别名:检查NSURL bookmarkDataWithContentsOfURL:以解决它们可以使用的问题:NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:
对于10.6之前的版本,Apple在Cocoa文档中也有一个很好的样本代码"Resolving aliases",用于解析NSString
路径中的别名:
NSString *path = <#Get a suitable path#>;
NSString *resolvedPath = nil;
CFURLRef url = CFURLCreateWithFileSystemPath
(kCFAllocatorDefault, (CFStringRef)path, kCFURLPOSIXPathStyle, NO);
if (url != NULL)
{
FSRef fsRef;
if (CFURLGetFSRef(url, &fsRef))
{
Boolean targetIsFolder, wasAliased;
OSErr err = FSResolveAliasFile (&fsRef, true, &targetIsFolder, &wasAliased);
if ((err == noErr) && wasAliased)
{
CFURLRef resolvedUrl = CFURLCreateFromFSRef(kCFAllocatorDefault, &fsRef);
if (resolvedUrl != NULL)
{
resolvedPath = (NSString*)
CFURLCopyFileSystemPath(resolvedUrl, kCFURLPOSIXPathStyle);
CFRelease(resolvedUrl);
}
}
}
CFRelease(url);
}
if (resolvedPath == nil)
{
resolvedPath = [[NSString alloc] initWithString:path];
}
你想进入业务手动加载数据并解释它,我不认为Alias的格式有记录。
答案 2 :(得分:1)
处理别名的方法是Alias Manager。 (虽然它是碳味的,但基于FSRef
的接口仍然可用于64位。)
答案 3 :(得分:1)
注意:我正在寻找一些像复制这样的操作。
您可能对核心服务文件管理器copying functions,然后或NSWorkspace's equivalent operation感兴趣。
答案 4 :(得分:0)
我不确定你是指的是符号链接(标准unix),还是Apple的别名发明,但是 this 看起来应该处理它。
答案 5 :(得分:0)
如果您想要读取别名数据本身,您只需使用posix api打开文件并从中读取即可。您只需使用cat
即可在终端上看到此内容。
Kone:test eric$ echo Hi Mom! > foo.txt
Kone:test eric$ ln -s foo.txt foo2.txt #to contrast symbolic link and alias
<< Make alias in Finder >>
Kone:test eric$ ls -l
total 192
-rw-r--r-- 1 eric staff 8 Apr 23 11:44 foo.txt
-rw-r--r--@ 1 eric staff 43252 Apr 23 11:45 foo.txt alias
lrwxr-xr-x 1 eric staff 7 Apr 23 11:44 foo2.txt -> foo.txt
Kone:test eric$ cat foo.txt
Hi Mom!
Kone:test eric$ cat foo2.txt
Hi Mom!
Kone:test eric$ cat foo.txt\ alias
bookmark88?????AܧUserserictestfoo.txt...yadda yadda yadda for 40 some k
我不知道这是否能回答你的问题。你真的想打开别名文件吗?