1

ハードディスク上のフォルダを Finder のデバイスとしてマウントする方法はありますか。ここでの目的は、アプリケーションがデータの保存に使用するフォルダーにアクセスする簡単な方法をユーザーに提供することです。ユーザーに Application Data 内のデータを検索させたくありません。むしろ、このデータをマウントされたボリュームまたはデバイスとして Finder で使用できるようにすることを許可したいと思います。また、このボリュームまたはデバイスを読み取り/書き込み可能にして、ユーザーがデータ ファイルに変更を加えた場合に、その変更が元のフォルダーに反映されるようにします。

ココア、カーボン、またはアップルスクリプトでこれを行う方法はありますか?

4

5 に答える 5

4

FUSEを調べてみてください。あなたはそれであらゆる種類の疑似ファイルシステムを持つことができます。

しかし、私はあなたがやろうとしていることに少し注意したいと思います。新しいデバイスを作成するよりも、アプリケーションでフォルダーを開くボタンだけを使用する方が理にかなっている場合があります。個人的には、そういうことをするアプリケーションを使い続けるのは難しいと思います。利用可能な他のアプリケーションには実際には適合しません。

エイリアスを使用して、アプリケーションデータディレクトリを指すこともできます。

于 2008-11-27T10:56:12.613 に答える
1

これを完全に再考することを提案できますか?シンボリックリンクまたはエイリアスは機能しますが、可能であれば、人々がそのフォルダーに移動するファイルタイプを登録し、それらを正しいフォルダーに移動またはコピーすることでそれらを開くことに応答することをお勧めします。ダウンロードした .wdgt ファイルをダブルクリックすると、ウィジェットを「インストール」するかどうかを尋ねられ、インストールする場合は ~/Library/Widgets にコピーされるダッシュボード インターフェイスのようなものを考えています。明らかに、画像、フォルダー、または一般的なテキスト ファイルなどの一般的なタイプを扱っている場合、これは実用的ではない可能性があります。

実装するには、ドキュメント タイプを Info.plist に追加し、App Delegate の -application:openFile: メソッドで処理します。

于 2008-11-27T17:21:08.717 に答える
1

スパース ディスク イメージを使用して、「偽の」ドライブを作成できます。

しかし、アプリケーションでデータ ディレクトリを構成可能にしないのはなぜでしょうか? またはサブディレクトリを使用し~/Documents/ますか?

デスクトップ上のエイリアス/シンボリックリンクが最も簡単な解決策になります:

ln -s '~/Application Data/Yourapp' '~/Desktop/Yourapp Data'
于 2008-11-27T12:47:50.720 に答える
0

私はNSWorkspaceを使用してそれを行います。私の場合、関数 -(BOOL)isMountedPath; で最初のチェックを行います。

取り付けのコードは次のとおりです。

    NSURL *path=[NSURL URLWithString:@"smb://server.resource/KEYS_DB"];
    if(NO==[self isMountedPath:[path absoluteString]])
    {
        NSWorkspace *ws=[NSWorkspace sharedWorkspace];
        [ws openURL:path];
    }

パスがマウントされているかどうかを確認するコードは次のとおりです。

-(BOOL)isMountedPath:(NSString *)share
{
    NSArray * keys = @[NSURLVolumeURLForRemountingKey];
    NSArray * mountPaths = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:keys options:0];

    NSError * error;
    NSURL * remount;

    for (NSURL * mountPath in mountPaths) {
        [mountPath getResourceValue:&remount forKey:NSURLVolumeURLForRemountingKey error:&error];
        if(remount){
            if ([[[NSURL URLWithString:share] host] isEqualToString:[remount host]] && [[[NSURL URLWithString:share] path] isEqualToString:[remount path]])
            {
                printf("Already mounted at %s\n", [[mountPath path] UTF8String]);
                return YES;
            }
        }
    }
    return NO;
}

他の可能な便利な方法は次のとおりです。

-(NSString *)mountedPath:(NSString *)share
{
    NSArray * keys = @[NSURLVolumeURLForRemountingKey];
    NSArray * mountPaths = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:keys options:0];

    NSError * error;
    NSURL * remount;

    for (NSURL * mountPath in mountPaths) {
        [mountPath getResourceValue:&remount forKey:NSURLVolumeURLForRemountingKey error:&error];
        if(remount){
            if ([[[NSURL URLWithString:share] host] isEqualToString:[remount host]] && [[[NSURL URLWithString:share] path] isEqualToString:[remount path]])
            {
                printf("Already mounted at %s\n", [[mountPath path] UTF8String]);
                return [mountPath path];
            }
        }
    }
    return nil;
}
于 2015-09-02T15:00:03.050 に答える
0

これについても注意を促したいと思いますが、ほとんどのユーザーにとってやや混乱を招く可能性があるようです。とはいえ、問題のディレクトリへのソフトリンクを作成することを検討したことはありますか?

于 2008-11-27T12:47:50.203 に答える