是否可以在 Cocoa 中确定文件是否是从别名打开的?

Posted

技术标签:

【中文标题】是否可以在 Cocoa 中确定文件是否是从别名打开的?【英文标题】:Is it possible to determine in Cocoa whether a file was opened from an alias? 【发布时间】:2012-09-08 13:10:42 【问题描述】:

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

【问题讨论】:

【参考方案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 是否是别名,而不是尝试将其作为别名读取并查看它是否失败。

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

【讨论】:

我的意思是别名,您可以使用 Finder 的“制作别名”上下文菜单项创建的小文件。 如果你想知道我为什么需要这样的功能:想想一个图像查看器(如 Preview.app),它会扫描打开文件的父目录以预加载其他图像——以便更快地浏览或让用户使用箭头键导航。但是,如果您为图像创建别名并将其放入其他目录然后双击它,我们的图像查看器将扫描原始图像的目录,而不是别名的目录。这有点违反直觉,我想在我的应用程序中改变它。希望这是有道理的,并为我的语法错误感到抱歉:X

以上是关于是否可以在 Cocoa 中确定文件是否是从别名打开的?的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa File Opened Event - 检测文件是不是被打开

sql server 数据复制,订阅者只能输入发布者的别名,不能输ip地址,是否就不能做外网复制了

Cocoa框架中是否存在内存泄漏?或者我错过了什么?

是否有一种简洁的方法可以为同一个扩展定义两个或多个 bash 别名?

如何(是否可能)创建运行多个命令的hg命令别名?

确定音频文件是不是为 VBR