7

私はジェイルブレイクされたiPhone用のアプリに取り組んでいます。フォルダーのディレクトリのみを取得しようとしています。だから私はこれをやっています:

NSArray *contentOfFolder = [[NSFileManager defaultManager] directoryContentsAtPath:path];
NSLog(@"contentOfFolder: %@", contentOfFolder);
directoriesOfFolder = [[NSMutableArray alloc] initWithCapacity:100];
for (NSString *aPath in contentOfFolder) {
    NSLog(@"apath: %@", aPath);

    BOOL isDir;
if ([[NSFileManager defaultManager] fileExistsAtPath:aPath isDirectory:&isDir] &&isDir)
    {
        [directoriesOfFolder addObject:aPath];
        NSLog(@"directoriesOfFolder %@", directoriesOfFolder);
    }
}
NSLog(@"dirctories %@", directoriesOfFolder);

しかし、私が得るものを見てください。フォルダーのコンテンツを取得すると、すべてが正常に見えます。

2009-07-28 23:23:35.930 Drowser[573:207] 新しいパス /private/var 2009-07-28 23:23:35.945 Drowser[573:207] contentOfFolder: ( Keychains, "Managed Preferences", MobileDevice,バックアップ、キャッシュ、データベース、ea、空、フォルダ、ライブラリ、ローカル、ロック、ログ、ログ、モバイル、メッセージ、設定、ルート、実行、スプール、スタッシュ、tmp、vm )

しかしその後:

2009-07-28 23:23:35.950 Drowser[573:207] apath: キーチェーン 2009-07-28 23:23:35.954 Drowser[573:207] apath: 管理設定 2009-07-28 23:23:35.959 Drowser [573:207] apath: MobileDevice 2009-07-28 23:23:35.984 Drowser[573:207] apath: バックアップ 2009-07-28 23:23:35.993 Drowser[573:207] apath: キャッシュ 2009-07- 28 23:23:36.002 Drowser[573:207] apath: db 2009-07-28 23:23:36.011 Drowser[573:207] apath: ea 2009-07-28 23:23:36.019 Drowser[573:207] apath: 空の 2009-07-28 23:23:36.028 Drowser[573:207] apath: フォルダー 2009-07-28 23:23:36.037 Drowser[573:207] apath: lib 2009-07-28 23:23: 36.046 Drowser[573:207] ディレクトリのフォルダ ( lib )

「lib」のみ!フォルダとして認識されます。それはどうしてですか?他のものもフォルダーです。SSHで確認しました。

誰かアイデアがありますか?私は何か間違ったことをしていますか?

4

1 に答える 1

23

これは非常に簡単な間違いですが、修正も非常に簡単です。ディレクトリの内容を列挙すると、アイテムの名前のみが表示され、アイテムのフルパスは表示されません。フルパスは自分で作成する必要があります。だからあなたが持っているところ:

for (NSString *aPath in contentOfFolder) {
  NSLog(@"apath: %@", aPath);

  BOOL isDir;
  if ([[NSFileManager defaultManager] fileExistsAtPath:aPath isDirectory:&isDir] &&isDir) {
    [directoriesOfFolder addObject:aPath];
    NSLog(@"directoriesOfFolder %@", directoriesOfFolder);
  }
}

あなたは実際にこれを持っているべきです:

for (NSString *aPath in contentOfFolder) {
  NSString * fullPath = [path stringByAppendingPathComponent:aPath];

  BOOL isDir;
  if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] &&isDir) {
    [directoriesOfFolder addObject: fullPath];
  }
}
于 2009-07-28T22:22:13.713 に答える