2009-07-28 2 views
7

Я работаю над приложением для взломанных iPhone. Я пытаюсь получить только каталоги папки. поэтому я делаю это:iPhone: NSFilemanager fileExistsAtPath: isDirectory: не работает должным образом?

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] новый путь/частный/var 2009-07-28 23: 23: 35.945 Drowser [573: 207] contentOfFolder: ( брелки, "Управляемые Preferences", MobileDevice, резервное копирование, кэш, дБ, еа, пустой, папки, Lib, местные, замок, журнал, журналы, мобильные, сообщения, предпочтения, корень, пробег, шпули, тайников, TMP, В.М. )

но:

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: backups 2009-07-28 23: 23: 35.993 Drowser [573: 207] apath: cache 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: empty 2009-07-28 23: 23: 36.028 Drowser [573: 207] apath: folders 2009-07-28 23: 23: 36.037 Drowser [573: 207] apath: lib 2009-07-28 23: 23: 36,046 Drowser [573: 207] directoriesOfFolder ( Lib )

только "Lib"! распознается как папка. как это может быть? другие - папки тоже. Я подтвердил это через SSH.

У кого-нибудь есть идеи? Я делаю что-то неправильно?

ответ

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]; 
    } 
} 
+2

Я уверен, что я просто выставляя свое невежество на синтаксис указателей здесь, но вы не хотите, пространство между ' && 'и' isDir'? –

+0

@Yar: Обычно я вставляю его, но я толкнул его и оставил его. Однако я не считаю, что это синтаксически требуется. –

+0

Понял, просто проверяя, что я чего-то не упускаю. Спасибо. –

Смежные вопросы