是否有可能在Cocoa中确定是否从别名中打开了文件?

时间:2012-09-08 13:10:43

标签: objective-c macos cocoa

我想到的程序需要与以特定扩展名结尾的所有文件(例如“.abc”)相关联,因此当用户双击某个“file.abc”时它将打开。当用户双击此类文件的别名时,是否可以在Cocoa中确定?

1 个答案:

答案 0 :(得分:1)

当以这种方式启动时,应用程序代表将收到application:openFile:。如果这导致您启动,application:openFile:将介于applicationWillFinishLaunching:applicationDidFinishLaunching:之间。您可能会在其他时间收到application:openFile:,因为您可能已在用户双击文档时启动。


编辑:别名现在称为“书签”(自10.6起)。您可以使用NSURL来阅读它们。有关详细信息,请参阅File System Programming Guide,但这是一个简短的示例:

NSURL *aliasURL = [NSURL fileURLWithPath:@"..."];
NSData *alias = [NSURL bookmarkDataWithContentsOfURL:aliasURL error:&error];
if (alias == NULL) {
  NSLog(@"Failed aliasURL: %@", error);
}

BOOL isStale;
NSURL *realURL = [NSURL URLByResolvingBookmarkData:alias options:0 relativeToURL:nil bookmarkDataIsStale:&isStale error:&error];
if (isStale || realURL == NULL) {
  NSLog(@"Failed realURL: %@", error);
}

NSLog(@"realPath:%@", [realURL path]);

我不知道任何API会告诉您某个给定的NSURL是否是别名,而不是尝试将其作为一个别名读取并查看它是否失败。

请记住,用户也可能使用符号链接创建相同的情况。