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

Macos OSX上应用程序的首选路径?,macos,text-editor,Macos,Text Editor,我希望能够从我的应用程序运行文本编辑器,正如用户在text_editor环境变量中给出的那样。现在,假设该变量中没有任何内容,我想默认使用OSX附带的TextEdit程序。在我的应用程序中硬编码/Applications/TextEdit.app/Contents/MacOS/TextEdit是否符合犹太教,还是有更好的方法调用该程序 编辑:作为记录,我仅限于运行一个特定的应用程序路径,在C语言中。我没有打开一个文本文件的路径 编辑2:说真的,我不是在这里打开文件。我询问应用程序路径是有原因的。

我希望能够从我的应用程序运行文本编辑器,正如用户在text_editor环境变量中给出的那样。现在,假设该变量中没有任何内容,我想默认使用OSX附带的TextEdit程序。在我的应用程序中硬编码/Applications/TextEdit.app/Contents/MacOS/TextEdit是否符合犹太教,还是有更好的方法调用该程序

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


编辑2:说真的,我不是在这里打开文件。我询问应用程序路径是有原因的。

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

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

open <full path to text file>
打开
这将在默认文本编辑器中打开文本文件。您可以使用
open
命令打开任何文件类型。

我相信如果用户的语言设置不是英语,硬编码“应用程序”将无法工作。例如,在Norsk,“应用程序”文件夹被命名为“程序员”


苹果关于国际化的文件是。从第45页开始是关于处理本地化路径名的一节

Mac OS X有一种称为“统一类型标识符”的机制,用于跟踪数据类型和能够处理它们的应用程序之间的关联。管理此功能的子系统是启动服务。您可以执行以下两种操作之一:

  • 如果您有一个路径扩展名相当知名的文件,例如
    .txt
    ,您可以要求
    NSWorkspace
    在适当的应用程序中打开该文件

  • 如果您没有已知的路径扩展名,但知道数据的类型,则可以让Launch Services查找该类型的默认应用程序,然后让
    NSWorkspace
    在该特定应用程序中打开文件


如果您这样做,您将获得与查找程序相同的行为,并且您不必fork()/exec()或仅使用system()来打开文件。

在第二次编辑中,听起来您只是想获得TextEdit的路径,使用NSWorkspace方法AbsolutePathForAppBundleWithinter可以轻松完成此操作:

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

事实上,我在文档中发现了这样一个问题:“本地化路径名仅用于显示,不应用于访问文件系统。”不要这样做-您不需要fork/exec就可以在另一个应用程序中打开文件。