OSX上应用程序的首选路径?

时间:2008-09-29 17:43:35

标签: macos text-editor

我希望能够从我的应用程序运行文本编辑器,由用户在TEXT_EDITOR环境变量中给出。现在,假设该变量中没有任何内容,我想默认使用OSX附带的TextEdit程序。是否可以将/Applications/TextEdit.app/Contents/MacOS/TextEdit硬编码到我的应用程序中,还是有更好的方法来调用该程序?

编辑:对于记录,我仅限于在C中运行特定的应用程序路径。我没有打开文本文件的路径。

编辑2:认真的人,我不是在这里打开文件。我之所以问一个应用程序路径是有原因的。

5 个答案:

答案 0 :(得分:4)

Mac OS X有一种称为“统一类型标识符”的机制,它用于跟踪数据类型和可以处理它们的应用程序之间的关联。管理它的子系统是Launch Services。你可以做以下两件事之一:

  • 如果您的文件具有合理知名的路径扩展名,例如.txt,您只需要NSWorkspace在相应的应用程序中打开该文件。

  • 如果您没有众所周知的路径扩展,但是您知道数据类型,则可以要求Launch Services查找该类型的默认应用程序,然后询问NSWorkspace打开该特定应用程序中的文件。

如果你这样做,你将获得与Finder相同的行为,你不必使用fork()/ exec()或仅使用system()来打开文件。

答案 1 :(得分:4)

在你的第二次编辑中,它听起来好像你只想获得TextEdit的路径,这可以通过使用NSWorkspace方法absolutePathForAppBundleWithIdentifier轻松完成:

NSString *path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.apple.TextEdit"];

答案 2 :(得分:2)

我相信如果用户的语言设置不是英语,硬编码“应用程序”将无效。例如,在Norsk中,“Applications”文件夹名为“Programmer”。

关于国际化的Apple文件是here。从第45页开始是关于处理本地化路径名的部分。

答案 3 :(得分:0)

我相信Mac OS X提供了默认的应用程序机制,因此.txt将在TextEdit.app或Emacs或GVim或用户指定的任何内容中打开。然而我在网上找不到任何东西。

答案 4 :(得分:-1)

您可以从应用程序运行以下命令:

open <full path to text file>

这将在默认文本编辑器中打开文本文件。您可以使用open命令打开任何文件类型。