2012-02-29 5 views
0

私はこのコードを持っています。Firefoxのディレクトリ

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" 

私は、 "/ライブラリ/ Application Support/Firefoxの/プロファイル/ *。デフォルト/ places.sqlite" を試みたが、Objective-Cで動作しません。

私を助けることができますか? おかげ

答えて

0

では、各ユーザーのためである、あなたは何ができるかを知っていると仮定すると、cbk4yc7r:

user.dirstringは、各ユーザーのcbk4yc7rのと同じです
[NSString stringWithFormat:@"/Library/Application Support/Firefox/Profiles/%@.default/places.sqlite", user.dirString]; 

+0

user.dirstringのユーザーは宣言されていません。何か問題でも? – Joannes

+0

'user.dirstring'は、ユーザーごとに異なるこの文字列にアクセスする方法の例にすぎません。これはあなたの便利な変数に置き換えてください(おそらく、以下の@valexaで説明されているようにprofiles.iniを解析した結果として)。 –

0

まず第一に、あなたが第二に、そのディレクトリ内のプロファイルは、例えば〜/ライブラリ/ Application Support/Firefoxの/ profiles.iniファイルで定義され、適切な親ディレクトリを取得するために

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

を使用する必要がありますあなたがprofiles.ini解析したり(それが存在する場合)のプロファイルIDを決定するために最善の解決策は、いくつかのFirefoxのAPIを使用することです

[[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathName error:&error]; 
0

使用する必要があるので、「パス=プロファイル/ cbk4yc7r.default」。しかし、私はこれが実現可能かどうかを知るためにFirefoxの内部をよく知っていません。 I は、単一のユーザーが複数のプロファイルを持つことができることを認識していますが、これは考慮する必要があります。

また、(他のレスポンダも)ディレクトリ構造について多くの仮定を立てていますが、これは保証できません。また、すべてが正しく動作することを前提としていますが、ディスク操作は保証されていません。これらのことを念頭に置いて、私はFoundationが提供する抽象概念をかなり徹底的に使用する次のものを提出します。また、必要に応じて最新の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

おっと...私のコードはプロファイル全体を削除します...一瞬... –

+0

修正。更新されたコードをご覧ください。 –

+0

Firefox APIがわかりません。 AppleScriptエディタでは* .default/places.sqliteを使用しますが、objective-cでは動作しません。より簡単なソリューションですか? – Joannes