2009-10-24 43 views

回答

1

要使用我的NSTask,实例创建别名,看看NDAlias,在http://www.cocoadev.com/index.pl?NDAlias

+0

看起来不错。不幸的是,我不能将其用于高于我的许可原因,但幸运的是,符号链接似乎足以满足我的情况。 – zekel 2010-02-05 15:16:54

+0

链接中断 – rraallvv 2014-09-13 22:16:10

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

+0

书签数据不是别名。如果您将这些数据或书签文件传递给别名管理器,别名管理器将会对此感兴趣。 – 2009-10-25 00:32:02

+0

(这意味着如果您将书签文件放入运行Leopard或更低版本的计算机上,则不起作用。) – 2009-10-25 00:35:09

+0

@Peter,我不知道书签数据与AliasManager别名不可互换。感谢指针。随意编辑适当的职位。如果你必须支持OS X <10.6,我想这个例子对于'BDAlias'或者类似的东西更加强大。 – 2009-10-25 20:43:29

-1

嗨,您可以:

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

改为使用更简单的' - [NSFileManager createSymbolicLinkAtPath:withDestinationPath:error:]';没有必要启动一个单独的可执行文件来创建符号链接。 – smokris 2013-01-10 19:27:04

2

我知道这是太远了,现在我冒充这个答案,但它可以帮助别人,

你也可以做到这一点像,

注意,它是创建硬链接为@zekel评论

创建它们,看看linkItemAtURL:toURL:error:NSFileManagerlinkItemAtPath:toPath:error:

+0

文档说这将创建一个硬链接,其行为与别名有很大不同。 – zekel 2013-10-08 21:14:05

+1

@zekel,是啊!那就对了!在我的要求中,我会建立硬链接,一旦我的任务完成,我就会将其删除! – Hemang 2013-10-09 06:21:28