读取别名文件

时间:2010-04-09 09:25:06

标签: objective-c cocoa macos

我想以编程方式在Mac OS X中读取别名。当我尝试它时总是阅读原始文件。 知道如何做到这一点吗?

感谢您的所有建议。

6 个答案:

答案 0 :(得分:4)

查看BDAlias。这是Alias周围很好的Cocoa包装。

http://github.com/rentzsch/bdalias

答案 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

我不知道这是否能回答你的问题。你真的想打开别名文件吗?