我找不到创建别名的便捷方法,所以我选择了符号链接。我担心这可能不够好。也许这个图标不会出现在某些版本的OS X或类似的东西上。
[[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:destPath error:nil];
这种事情我能做的最好吗? http://www.danandcheryl.com/2009/08/how-create-alias-programmatically
答案 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)
答案 3 :(得分:-1)
您好,您可以使用我的NSTask,例如:
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
[NSTask launchedTaskWithLaunchPath:@"/bin/ln" arguments:[NSArray arrayWithObjects:@"-s", [[NSBundle mainBundle] bundlePath], [arr objectAtIndex:0], nil]];