2010-01-31 11 views
6

Estoy tratando de devolver la lista de directorios presentes en el directorio de Documentos de una aplicación. Puedo obtener una matriz que contiene todos los archivos de una extensión determinada (por ejemplo, archivos .txt o archivos .png) y puedo devolver todos los contenidos (incluidos los directorios). El problema surge cuando quiero devolver solo los directorios. ¿Hay una forma simple de hacer esto?Obtener una matriz de directorios en el directorio de documentos

Aquí está mi código para devolver todos los archivos .txt:

- (ViewController *) init { 
    if (self = [super init]) self.title = @"Text Files"; 

    // get the list of .txt files 
    directoryList = [[[[NSFileManager defaultManager] directoryContentsAtPath:DOCUMENTS_FOLDER] 
         pathsMatchingExtensions:[NSArray arrayWithObjects:@".txt", nil]] retain]; 
    NSLog(@"%@", directoryList); 

    return self; 
} 

y para todos los archivos

- (ViewController *) init { 
    if (self = [super init]) self.title = @"Text Files"; 

    // get the list of all files and directories 
    directoryList = [[[NSFileManager defaultManager] directoryContentsAtPath:DOCUMENTS_FOLDER] retain]; 

    NSLog(@"%@", directoryList); 

    return self; 
} 

Respuesta

22

Prueba esto:

- (ViewController *) init { 
    if (self = [super init]) self.title = @"Text Files"; 

    // get the list of all files and directories 
    NSFileManager *fM = [NSFileManager defaultManager]; 
    fileList = [[fM directoryContentsAtPath:DOCUMENTS_FOLDER] retain]; 
    NSMutableArray *directoryList = [[NSMutableArray alloc] init]; 
    for(NSString *file in fileList) { 
     NSString *path = [DOCUMENTS_FOLDER stringByAppendingPathComponent:file]; 
     BOOL isDir = NO; 
     [fM fileExistsAtPath:path isDirectory:(&isDir)]; 
     if(isDir) { 
      [directoryList addObject:file]; 
     } 
    } 

    NSLog(@"%@", directoryList); 

    return self; 
} 
+0

Excelente SUBW respuesta. No sabía del fileExistsAtPath: isDirectory: método de instancia; Tendré una lectura de la documentación de NSFileManager. – Jack

+0

PS funcionó. – Jack

+2

directoryContentsOfPath: está en desuso. Debe ser subpathsOfDirectoryAtPath: en su lugar – DerWOK

2

Mrueg escribió todo, pero una cosa que

fileList = [[fM directoryContentsAtPath:DOCUMENTS_FOLDER]; 

Reemplazar por

fileList = [fileManager contentsOfDirectoryAtPath:filePath error:nil]; 
+0

Correcto. "directoryContentsAtPath" está en desuso. –

Cuestiones relacionadas