Как создать псевдоним в Какао? Символическая ссылка достаточно хороша? - PullRequest
2 голосов
/ 25 октября 2009

Мне не удалось найти удобный способ создания псевдонима, поэтому я пошел с символической ссылкой. Я беспокоюсь, что это может быть недостаточно хорошо. Возможно, значок не отображается в некоторых версиях OS X или что-то в этом роде.

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

Это лучшее, что я могу сделать? http://www.danandcheryl.com/2009/08/how-create-alias-programmatically

Ответы [ 4 ]

11 голосов
/ 25 октября 2009

Ответ зависит от того, используете ли вы 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
  }
}

Как отмечает Питер Хоси, данные закладок, написанные с использованием NSURL API, не совместимы с подпрограммами AliasManager. Если вы должны поддерживать OS X <10.6, вам придется напрямую использовать API Carbon AliasManager или одну из оболочек Objective-C. Мне нравится Вольф Ренстч филиал <code>BDAlias, доступны здесь .

2 голосов
/ 08 октября 2013

Я знаю, что сейчас слишком далеко, я излагаю этот ответ, но он может кому-то помочь,

Вы также можете сделать это, как,

Обратите внимание, это создает жесткую ссылку, как прокомментировал @zekel

Чтобы создать их, взгляните на linkItemAtURL:toURL:error: и linkItemAtPath:toPath:error: в NSFileManager.

1 голос
/ 04 февраля 2010

Чтобы создать псевдоним, взгляните на NDAlias, на http://www.cocoadev.com/index.pl?NDAlias

0 голосов
/ 30 декабря 2012

Привет Вы можете использовать мой NSTask, пример:

NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
[NSTask launchedTaskWithLaunchPath:@"/bin/ln" arguments:[NSArray arrayWithObjects:@"-s", [[NSBundle mainBundle] bundlePath], [arr objectAtIndex:0], nil]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...