2009-07-28 6 views
7

Je travaille sur une application pour les iPhones jailbreakés. J'essaie d'obtenir seulement les répertoires d'un dossier. donc je fais ceci:iPhone: NSFilemanager fileExistsAtPath: isDirectory: ne fonctionne pas correctement?

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

mais regardez ce que je reçois. quand je reçois le contenu du dossier tout semble bien:

2009-07-28 23: 23: 35.930 Drowser [573: 207] nouveau chemin/privé/var 2009-07-28 23: 23: 35.945 Drowser [573: 207] contentOfFolder: ( Porte-clés, "Préférences gérées", mobileDevice, sauvegardes, cache, db, ea, vide, dossiers, lib, verrouillage local, , journal, journaux, mobile, msgs, préférences, racine, exécution, bobine, Stash, tmp, vm )

mais:

2009-07-28 23: 23: 35,950 Drowser [573: 207] aLigne : Porte-clés 2009-07-28 23: 23: 35.954 Drowser [573: 207] apath: Préférences gérées 2009-07-28 23: 23: 35.959 Drowser [573: 207] apath: MobileDevice 2009-07-28 23 : 23: 35.984 Drowser [573: 207] apath: sauvegardes 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: vide 2009-07-28 23: 23: 36.028 Drowser [573: 207] apath: dossiers 2009-07-28 23: 23: 36.037 Drowser [573: 207] apath: lib 2009-07-28 23: 23: 36,046 Drowser [573: 207] directoriesOfFolder ( lib )

que "lib"! est reconnu en tant que dossier. comment cela peut-il être? les autres sont aussi des dossiers. Je l'ai confirmé via SSH.

Quelqu'un a-t-il une idée? Est-ce que je fais quelque chose de mal?

Répondre

23

C'est une erreur très facile à faire, mais c'est aussi très facile à résoudre. L'énumération du contenu d'un répertoire ne vous donne que le nom de l'élément, pas le chemin complet de l'élément. Vous devez construire le chemin complet vous-même. Alors, où vous avez:

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

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

Vous auriez dû ceci:

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

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

Je suis sûr que je suis juste exposer mon ignorance sur la syntaxe du pointeur, mais ne vous voulez un espace entre ' && 'et' isDir'? –

+0

@Yar: J'en ai l'habitude d'en mettre un, mais je l'ai mis en gras et je l'ai laissé de côté. Cependant, je ne crois pas que ce soit syntaxiquement requis. –

+0

Compris, juste vérifier que je ne manque pas quelque chose. Je vous remercie. –

Questions connexes