我希望能够从我的应用程序运行文本编辑器,由用户在TEXT_EDITOR环境变量中给出。现在,假设该变量中没有任何内容,我想默认使用OSX附带的TextEdit程序。是否可以将/Applications/TextEdit.app/Contents/MacOS/TextEdit硬编码到我的应用程序中,还是有更好的方法来调用该程序?
编辑:对于记录,我仅限于在C中运行特定的应用程序路径。我没有打开文本文件的路径。
编辑2:认真的人,我不是在这里打开文件。我之所以问一个应用程序路径是有原因的。
答案 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
命令打开任何文件类型。