2012-03-12 9 views
5

necesito obtener todos los archivos en un directorio, incluidos todos los subdirectorios y todos los archivos en cada subdirectorio. en C objetiva, he intentar utilizar este método [[NSFileManager defaultManager] contentsOfDirectoryAtPath:filePath error:nil]cómo obtener todos los archivos en un directorio en ipad usando el objetivo c

pero sólo me dan una gran variedad de contenido de los archivos en el directorio rutaArchivo, no puedo conseguir todos los archivos del subdirectorio, puede alguien ayudarme ??

agradecimiento

Respuesta

8
- (void)scanPath:(NSString *) sPath { 

    BOOL isDir; 

    [[NSFileManager defaultManager] fileExistsAtPath:sPath isDirectory:&isDir]; 

    if(isDir) 
    { 
     NSArray *contentOfDirectory=[[NSFileManager defaultManager] contentsOfDirectoryAtPath:sPath error:NULL]; 

     int contentcount = [contentOfDirectory count]; 
     int i; 
     for(i=0;i<contentcount;i++) 
     { 
      NSString *fileName = [contentOfDirectory objectAtIndex:i]; 
      NSString *path = [sPath stringByAppendingFormat:@"%@%@",@"/",fileName]; 


      if([[NSFileManager defaultManager] isDeletableFileAtPath:path]) 
      { 
       NSLog(path); 
       [self scanPath:path]; 
      } 
     } 

    } 
    else 
    { 
     NSString *msg=[NSString stringWithFormat:@"%@",sPath]; 
     NSLog(msg); 
    } 
} 

puede llamar a esta función que registrar todos los archivos en el directorio, espero que esto ayude.

+0

@Risma este es el tipo de solución recursiva a la que me refería en la sala de chat. – GnarlyDog

+0

gracias por la respuesta :) –

+0

@Risma Por favor, asegúrese de dar las gracias a la persona correcta :) – Triode

5

Desea utilizar enumeratorAtURL: includingPropertiesForKeys: Opciones: error: en su lugar. Se hace un recuento de profundidad por defecto:

NSURL *myDirectoryURL = [[NSBundle mainBundle] URLForResource:@"Assets" withExtension:@""]; 
NSDirectoryEnumerator *directoryEnumerator = [[NSFileManager defaultManager] enumeratorAtURL:myDirectoryURL includingPropertiesForKeys:[NSArray array] options:0 errorHandler:^BOOL(NSURL *url, NSError *error) { 
    // handle error 
    return NO; 
}]; 

NSString *fileOrDirectory = nil; 
while ((fileOrDirectory = [directoryEnumerator nextObject])) { 
    // use file or directory 
} 

El argumento de opciones le permite especificar la enumeración profunda o superficial.

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html

+0

¿me puede dar todos los archivos en cada directorio? –

+0

lo siento - debería haber sido enumeratorAtURL - esto funciona, probado –

+0

Esa es una horrible línea de asignación. –

Cuestiones relacionadas