2009-07-28 10 views
7

Sto lavorando a un'app per iPhone jailbroken. Sto cercando di ottenere solo le directory di una cartella. così sto facendo questo:iPhone: NSFilemanager fileExistsAtPath: isDirectory: non funziona correttamente?

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); 

ma guarda quello che ottengo. quando ottengo il contenuto della cartella tutto sembra a posto:

2009-07-28 23: 23: 35.930 Drowser [573: 207] nuovo percorso/private/var 2009-07-28 23: 23: 35.945 Drowser [573: 207] contentOfFolder: ( Portachiavi, "Preferenze gestiti", mobileDevice, backup, di cache, db, EA, vuoto, cartelle, lib, locali, serratura, registro, log, mobile, msg, preferenze, radice, run, spool, Stash, TMP, vm )

ma poi:

2009-07-28 23: 23: 35,950 Drowser [573: 207] alinea : Keychains 2009-07-28 23: 23: 35.954 Drowser [573: 207] apath: Preferenze gestite 2009-07-28 23: 23: 35.959 Drowser [573: 207] apath: MobileDevice 2009-07-28 23 : 23: 35.984 Drowser [573: 207] apath: backup 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: vuoto 2009-07-28 23: 23: 36.028 Drowser [573: 207] apath: cartelle 2009-07-28 23: 23: 36.037 Drowser [573: 207] apath: lib 2009-07-28 23: 23: 36,046 Drowser [573: 207] directoriesOfFolder ( lib )

solo "lib"! è riconosciuto come cartella. come può essere? anche gli altri sono cartelle. L'ho confermato tramite SSH.

qualcuno ha un'idea? Sto facendo qualcosa di sbagliato?

risposta

23

Questo è un errore molto facile da fare, ma è anche molto facile da risolvere. L'enumerazione dei contenuti di una directory ti dà solo il nome dell'elemento, non il percorso completo dell'elemento. Devi costruire il percorso completo da solo. Allora, dove si ha:

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

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

si dovrebbe effettivamente avere questo:

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

    BOOL isDir; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] &&isDir) { 
    [directoriesOfFolder addObject: fullPath]; 
    } 
} 
+2

Sono sicuro che sto solo esponendo la mia ignoranza in sintassi puntatore qui, ma non vuoi uno spazio tra ' && 'e' isDir'? –

+0

@Yar: Io di solito ne metto uno, ma ho perso questo dito e l'ho lasciato fuori. Tuttavia, non credo che sia richiesto sintatticamente. –

+0

Capito, solo controllando che non mi manchi qualcosa. Grazie. –

Problemi correlati