你如何在Cocoa中创建一个别名?符号链接是否足够好?

时间:2009-10-24 20:53:21

标签: objective-c cocoa macos

我找不到创建别名的便捷方法,所以我选择了符号链接。我担心这可能不够好。也许这个图标不会出现在某些版本的OS X或类似的东西上。

[[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:destPath error:nil];

这种事情我能做的最好吗? http://www.danandcheryl.com/2009/08/how-create-alias-programmatically

4 个答案:

答案 0 :(得分:11)

答案取决于您使用的是OS X 10.5还是10.6。在10.6中,旧的AliasManger已被NSURL的书签数据取代。要创建别名,请给出NSURL实例:

NSURL *url = [NSURL fileURLWithPath:pathToAliasTarget];
NSError *err = nil;
NSData *bookmarkData = [url bookmarkDataWithOptions: NSURLBookmarkCreationSuitableForBookmarkFile includingResourceValuesForKeys:nil relativeToURL:nil error:&err];

if(bookmarkData == nil) {
  //handle NSError in err
} else {
  if(![NSURL writeBookmarkData:bookmarkData toURL:aliasFileURL options:NSURLBookmarkCreationSuitableForBookmarkFile error:&err]) {
    //handle NSError in err
  }
}

正如Peter Hosey所指出的,使用NSURL API编写的书签数据与AliasManager例程不兼容。如果您必须支持OS X< 10.6,您必须直接使用Carbon AliasManager API,或者使用Objective-C包装器之一。我喜欢Wolf Renstch的BDAlias分支,可用here

答案 1 :(得分:2)

我知道现在太过分了,我正在提出这个答案,但这可能有助于某人,

您也可以这样做,

请注意,它正在创建硬链接,因为@zekel发表了评论

要创建它们,请查看linkItemAtURL:toURL:error:中的linkItemAtPath:toPath:error:NSFileManager

答案 2 :(得分:1)

要创建别名,请在http://www.cocoadev.com/index.pl?NDAlias

查看NDAlias

答案 3 :(得分:-1)

您好,您可以使用我的NSTask,例如:

NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
[NSTask launchedTaskWithLaunchPath:@"/bin/ln" arguments:[NSArray arrayWithObjects:@"-s", [[NSBundle mainBundle] bundlePath], [arr objectAtIndex:0], nil]];