0

私はこのコードを持っています、そしてそれは大丈夫です。

NSString *pathName = [@"/Users/" stringByAppendingString:NSUserName()];
        pathName = [pathName stringByAppendingString:@"/Library/Application Support/AddressBook/Configuration.plist"];
        [[NSFileManager defaultManager] removeItemAtPath:pathName error:nil];

このディレクトリを使いたいのですが、cbk4yc7r.defaultというフォルダがあります。ユーザーごとに cbk4yc7r を変更します。このディレクトリを使用するようにコードを変更するにはどうすればよいですか?

"/Library/Application Support/Firefox/Profiles/cbk4yc7r.default/places.sqlite"

「/Library/Application Support/Firefox/Profiles/*.default/places.sqlite」を試しましたが、objective-c では機能しません。

手伝って頂けますか?ありがとう

4

3 に答える 3

0

最善の解決策は、何らかの Firefox API (存在する場合) を使用してプロファイル ID を判別することです。しかし、これが実現可能かどうかを知るのに十分なほど、Firefox の内部構造をよく知りません。ただし、1 人のユーザーが複数のプロファイルを持つことができることは知っていますが、これは考慮すべき点です

また、あなた (そして率直に言って、他のレスポンダー) は、ディレクトリ構造について多くの仮定を立てていますが、それらは保持されることが保証されていません。また、すべてが正しく機能することを前提としていますが、これはもちろんディスク操作について保証されていません。これらの考慮事項を念頭に置いて、財団が提供する抽象化をかなり徹底的に使用する以下を提出します。また、必要に応じてより最新の NSURL を使用します。

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *appDirErr;
    NSURL *appSupportDir = [fileManager URLForDirectory:NSApplicationSupportDirectory
                                               inDomain:NSUserDomainMask
                                      appropriateForURL:nil
                                                 create:NO
                                                  error:&appDirErr];

    if (appSupportDir) {
        NSURL *firefoxDir = [appSupportDir URLByAppendingPathComponent:@"Firefox/Profiles"
                                                           isDirectory:YES];
        NSError *profileErr;
        NSArray *profileURLs = [fileManager contentsOfDirectoryAtURL:firefoxDir
                                          includingPropertiesForKeys:nil
                                                             options:0
                                                               error:&profileErr];
        if (profileURLs) {
            for (NSURL *currentProfileURL in profileURLs) {
                NSURL *removalURL = [currentProfileURL URLByAppendingPathComponent:@"places.sqlite"
                                                                       isDirectory:NO];
                NSError *removalErr;
                if (! [fileManager removeItemAtURL:removalURL error:&removalErr]) {
                    NSLog(@"Error! %@", [removalErr localizedDescription]);
                }

            }
        }
        else {
            NSLog(@"Error! %@", [profileErr localizedDescription]);
        }
    }
    else {
        NSLog(@"Error! %@", [appDirErr localizedDescription]);
    }
于 2012-02-29T10:29:49.017 に答える
0

まず、使用する必要があります

NSString *pathName = [@"~/Library/Application Support/Firefox/Profiles/" stringByExpandingTildeInPath];

適切な親ディレクトリを取得するには、次に、そのディレクトリ内のプロファイルが ~/Library/Application Support/Firefox/profiles.ini ファイル (例: "Path=Profiles/cbk4yc7r.default") で定義されているため、profiles.ini を解析するか、使用する必要があります

[[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathName error:&error];
于 2012-02-29T10:18:23.600 に答える
0

各ユーザーの cbk4yc7r が何であるかを知っていると仮定すると、次のことができます。

 [NSString stringWithFormat:@"/Library/Application Support/Firefox/Profiles/%@.default/places.sqlite", user.dirString];

ここuser.dirstringで、各ユーザーの cbk4yc7r に相当します。

于 2012-02-29T10:09:27.977 に答える