2012-02-28 4 views
2

Quelqu'un peut-il m'aider à comprendre ce que je fais de mal avec cette méthode? J'essaie de détecter récursivement le contenu des répertoires et de créer un fichier xml dans chacun d'eux. Non-récursif fonctionne parfaitement et génère les fichiers xml appropriés. Les chokes récursifs sur la détection de dir et ajoutent tous les fichiers + dir sous l'élément "directories".NSFileManager fileExistsAtPath: isDirectory question

_dirArray = [[NSMutableArray alloc] init]; 
_fileArray = [[NSMutableArray alloc] init]; 

NSError *error; 
NSFileManager *filemgr = [NSFileManager defaultManager]; 
NSArray *filelist = [filemgr contentsOfDirectoryAtPath:dirPath error:&error]; 

for (int i = 0; i < filelist.count; i++) 
{ 
    BOOL isDir; 
    NSString *file = [NSString stringWithFormat:@"%@", [filelist objectAtIndex:i]]; 
    [_pathToDirectoryTextField stringValue], [filelist objectAtIndex:i]]; 

    if ([filemgr fileExistsAtPath:dirPath isDirectory:&isDir] && isDir) // I think this is what is crapping out. 
    { 
     [_dirArray addObject:file]; 
    } 
    else 
    { 
     if ([file hasPrefix:@"."]) 
     { 
      // Ignore file. 
     } 
     else 
     { 
      [_fileArray addObject:file]; 
     } 
    } 
} 

Merci pour les conseils les gars.

Répondre

4

je peux voir « si ([Filemanager fileExistsAtPath: FontPath isDirectory: & isDir] & & isDir) » provenant des exemples d'Apple dans la documentation, mais pour le copier fragmentaire et l'utiliser avec d'autre est une très mauvaise idée à moins que vous ne veulent obtenir des répertoires ou des fichiers supprimés parce que ce qu'il signifie:

if (itexists and itsadirectory){ 
    //its a existing directory 
    matches directories 
}else{ 
    //it is not a directory or it does not exist 
    matches files that were deleted since you got the listing 
} 

voici comment je le ferais:

NSString *dirPath = @"/Volumes/Storage/"; 

NSError *error; 
NSFileManager *filemgr = [NSFileManager defaultManager]; 
NSArray *filelist = [filemgr contentsOfDirectoryAtPath:dirPath error:&error]; 

for (NSString *lastPathComponent in filelist) { 
    if ([lastPathComponent hasPrefix:@"."]) continue; // Ignore file. 
    NSString *fullPath = [dirPath stringByAppendingPathComponent:lastPathComponent]; 
    BOOL isDir; 
    BOOL exists = [filemgr fileExistsAtPath:fullPath isDirectory:&isDir]; 

    if (exists) { 
     if (isDir) { 
      [_dirArray addObject:lastPathComponent];     
     }else{ 
      [_fileArray addObject:lastPathComponent];     
     }      
    } 
} 
+0

En fait, c'était comme je l'avais avant, et il ne fonctionne toujours pas pour moi. Mais si vous êtes convaincu que cela devrait ... alors peut-être que mon problème est ailleurs. Hmm. – crewshin

+0

Pas de dés. Mais c'est un bon appel de toute façon. Je vais le laisser. – crewshin

+0

ahh, ils doivent être dans une portée différente en tant que telle si (existe) {if (isDir) {}} – valexa

Questions connexes