2008-09-29 29 views
4

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

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

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

回答

4

在你的第二个编辑它听起来好像你只是想获得的路径,文本编辑,这可以很容易地通过使用NSWorkspace方法absolutePathForAppBundleWithIdentifier完成:

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

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

-1

你可以运行你的应用程序下面的命令:

open <full path to text file> 

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

+0

不这样做 - 你不需要fork/exec只是在另一个应用程序中打开一个文件。 – 2008-09-29 17:59:33

2

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

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

+0

实际上,我在文档中找到了这个: “本地化路径名仅用于显示,绝不应该用于访问文件系统。” – 2008-09-29 17:57:27

4

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

  • 如果您的文件具有相当熟知的路径扩展名,例如.txt,你可以问NSWorkspace在适当的应用程序中打开文件。

  • 如果您没有知名的路径扩展名,但您知道数据类型,则可以要求Launch Services查找该类型的默认应用程序,然后请求NSWorkspace以打开文件该具体应用。

如果你做这样你会得到相同的行为Finder上,你不会有叉()/执行exec()或使用系统()刚刚打开一个文件。