Каталог Firefox - PullRequest
       23

Каталог Firefox

0 голосов
/ 29 февраля 2012

У меня есть этот код, и он в порядке.

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"

Я пробовал "/ Библиотека / Поддержка приложений / Firefox / Профили / *. Default / place.sqlite", но не работает в target-c.

Вы можете мне помочь? Спасибо

Ответы [ 3 ]

0 голосов
/ 29 февраля 2012

Прежде всего вы должны использовать

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];
0 голосов
/ 29 февраля 2012

Лучшим решением будет использование API-интерфейса Firefox (если он существует) для определения идентификаторов профиля. Но я недостаточно хорошо знаю внутренности Firefox, чтобы понять, возможно ли это. Я делаю знаю, что один пользователь может иметь несколько профилей, но это то, что нужно учитывать.

Кроме того, вы (и, честно говоря, другие респонденты) делаете много предположений о структуре каталогов, которые гарантированно не сохраняются. Вы также предполагаете, что все работает правильно, что, конечно, не гарантируется для операций с диском. Учитывая эти соображения, я представлю следующее, в котором достаточно подробно используются абстракции, предоставляемые Фондом. Он также использует более современный 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]);
    }
0 голосов
/ 29 февраля 2012

Предполагая, что вы знаете, что такое cbk4yc7r для каждого пользователя, вы можете сделать:

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

, где user.dirstring - эквивалент cbk4yc7r для каждого пользователя.

...