4

私が考えているプログラムは、特定の拡張子 (「.abc」など) で終わるすべてのファイルに関連付ける必要があるため、ユーザーが「file.abc」をダブルクリックすると開きます。ユーザーがそのようなファイルへのエイリアスをダブルクリックしたときに Cocoa で判断することは可能ですか?

4

1 に答える 1

1

この方法で起動すると、アプリケーション デリゲートが受け取りますapplication:openFile:。それが原因で起動した場合、は と の間にapplication:openFile:来ます。ユーザーがドキュメントをダブルクリックしたときに既に起動されている可能性があるため、別のときに受け取る可能性があります。applicationWillFinishLaunching:applicationDidFinishLaunching:application:openFile:


編集: エイリアスは「ブックマーク」と呼ばれるようになりました (10.6 以降)。あなたはNSURLそれらを読むために使用します。詳細については、ファイル システム プログラミング ガイドを参照してください。簡単な例を次に示します。

NSURL *aliasURL = [NSURL fileURLWithPath:@"..."];
NSData *alias = [NSURL bookmarkDataWithContentsOfURL:aliasURL error:&error];
if (alias == NULL) {
  NSLog(@"Failed aliasURL: %@", error);
}

BOOL isStale;
NSURL *realURL = [NSURL URLByResolvingBookmarkData:alias options:0 relativeToURL:nil bookmarkDataIsStale:&isStale error:&error];
if (isStale || realURL == NULL) {
  NSLog(@"Failed realURL: %@", error);
}

NSLog(@"realPath:%@", [realURL path]);

NSURL指定されたエイリアスがエイリアスであるかどうかを示す APIは、それをエイリアスとして読み取って失敗するかどうかを確認する以外には知りません。

ユーザーもシンボリック リンクを使用して同じ状況を作成する可能性があることに注意してください。

于 2012-09-08T13:27:23.583 に答える