4

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

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

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

4

5 回答 5

4

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

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

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

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

于 2008-09-29T18:03:06.590 回答
4

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

NSString *path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.apple.TextEdit"];
于 2008-09-29T22:31:37.193 回答
2

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

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

于 2008-09-29T17:53:52.730 回答
0

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

于 2008-09-29T17:48:40.823 回答
-1

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

open <full path to text file>

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

于 2008-09-29T17:53:15.490 回答