4

ユーザーが TEXT_EDITOR 環境変数で指定したように、アプリからテキスト エディターを実行できるようにしたいと考えています。ここで、その変数に何もないと仮定して、OSX に同梱されている TextEdit プログラムをデフォルトに設定します。/Applications/TextEdit.app/Contents/MacOS/TextEdit をアプリにハードコードするのはコーシャですか、それともプログラムを呼び出すより良い方法はありますか?

編集:記録のために、Cで特定のアプリケーションパスを実行することに制限されています。テキストファイルへのパスを開いていません。

編集 2: まじめな人、私はここでファイルを開いているわけではありません。理由から、アプリケーション パスについて質問しています。

4

5 に答える 5

4

Mac OS X には、データ型とそれらを処理できるアプリケーションとの間の関連付けを追跡するために使用する「統一型識別子」と呼ばれるメカニズムがあります。これを管理するサブシステムが Launch Services です。次の 2 つのいずれかを行うことができます。

  • よく知られているパス拡張子 (たとえば.txt、 ) をNSWorkspace持つファイルがある場合は、適切なアプリケーションでファイルを開くように要求できます。

  • 既知のパス拡張子がなくても、データの種類がわかっている場合は、Launch Services にその種類の既定のアプリケーションを検索するように依頼NSWorkspaceし、その特定のアプリケーションでファイルを開くように依頼できます。

このようにすると、Finder と同じ動作が得られ、ファイルを開くためだけに fork()/exec() や system() を使用する必要がなくなります。

于 2008-09-29T18:03:06.590 に答える
4

2 番目の編集では、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 に答える