Digamos que tengo una carpeta en mi «Recursos» de la carpeta de mi aplicación para iPhone llamada «Documentos».

Hay una manera de que yo pueda obtener una matriz o algún tipo de lista de todos los archivos incluidos en la carpeta en tiempo de ejecución?

Así, en el código, se vería como:

NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];

Es esto posible?

InformationsquelleAutor CodeGuy | 2011-06-18

7 Comentarios

  1. 135

    Usted pueda obtener la ruta de acceso a la Resources directorio como este,

    NSString * resourcePath = [[NSBundle mainBundle] resourcePath];

    A continuación, agregar el Documents a la ruta,

    NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"Documents"];

    A continuación, puede utilizar cualquiera de la lista de directorio Api de NSFileManager.

    NSError * error;
    NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];

    Nota : Cuando se agrega a la carpeta de origen en el paquete asegúrese de seleccionar «Crear carpeta de referencias para añadida la opción de carpetas cuando se copia»

    • interesante. sin anexar trabajó y se encuentra de todo (incluyendo la carpeta de Documentos). pero con que anexar, el «directoryOfContents» matriz es nulo
    • oh, espera, «Documentos» es un «Grupo» no es una carpeta. hm. ¿cómo puedo agregar una carpeta en mi carpeta de recursos?
    • Usted puede Drag & Drop una carpeta en el proyecto y el contenido será copiado. O Añadir un Copy Files fase de construcción y especificar el directorio a copiar en él.
    • bien, me arrastró en. pero todavía piensa que el directorio está vacío. hm.
    • Hizo usted seleccione Create folder references for any added folders opción a la hora de copiar?
    • No. Yo no lo hice.
    • La opción predeterminada es la creación de grupos para las carpetas. Así que usted debe cambiar eso o usar el segundo enfoque sugerido por la adición de una fase de construcción.
    • Fresco. 🙂 Si has copiado los archivos a través de usted puede usar el segundo enfoque demasiado.

  2. 26

    Swift

    Actualizado para Swift 3

    let docsPath = Bundle.main.resourcePath! + "/Resources"
    let fileManager = FileManager.default
    
    do {
        let docsArray = try fileManager.contentsOfDirectory(atPath: docsPath)
    } catch {
        print(error)
    }

    Leer más:

    • Error de Dominio=NSCocoaErrorDomain Código=260 «de La carpeta «Recursos» no existe.» UserInfo={NSFilePath=/var/containers/Bundle/Application/A367E139-1845-4FD6-9D7F-FCC7A64F0408/Robomed.app/Resources, NSUserStringVariant=( Carpeta ), NSUnderlyingError=0x1c4450140 {Error de Dominio=NSPOSIXErrorDomain Código=2 «No existe el fichero o directorio»}}
  3. 18

    Usted puede probar este código también:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSError * error;
    NSArray * directoryContents =  [[NSFileManager defaultManager]
                          contentsOfDirectoryAtPath:documentsDirectory error:&error];
    
    NSLog(@"directoryContents ====== %@",directoryContents);
    • usted está asignando una matriz en directoryContents que inmediatamente se sobrescriben con una matriz devuelve por contentsOfDir…
    • Lo que quería mostrar era sólo una matriz que se mantenga el contenido del directorio. La matriz es no sólo, por ejemplo, el amor. He editado un poco.
  4. 11

    Swift versión:

        if let files = try? FileManager.default.contentsOfDirectory(atPath: Bundle.main.bundlePath ){
            for file in files {
                print(file)
            }
        }
  5. 6

    Listado De Todos Los Archivos En Un Directorio

         NSFileManager *fileManager = [NSFileManager defaultManager];
         NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
         NSArray *contents = [fileManager contentsOfDirectoryAtURL:bundleURL
                               includingPropertiesForKeys:@[]
                                                  options:NSDirectoryEnumerationSkipsHiddenFiles
                                                    error:nil];
    
         NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension ENDSWITH '.png'"];
         for (NSString *path in [contents filteredArrayUsingPredicate:predicate]) {
            //Enumerate each .png file in directory
         }

    De Forma Recursiva La Enumeración De Los Archivos En Un Directorio

          NSFileManager *fileManager = [NSFileManager defaultManager];
          NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
          NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:bundleURL
                                       includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey]
                                                         options:NSDirectoryEnumerationSkipsHiddenFiles
                                                    errorHandler:^BOOL(NSURL *url, NSError *error)
          {
             NSLog(@"[Error] %@ (%@)", error, url);
          }];
    
          NSMutableArray *mutableFileURLs = [NSMutableArray array];
          for (NSURL *fileURL in enumerator) {
          NSString *filename;
          [fileURL getResourceValue:&filename forKey:NSURLNameKey error:nil];
    
          NSNumber *isDirectory;
          [fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil];
    
           //Skip directories with '_' prefix, for example
          if ([filename hasPrefix:@"_"] && [isDirectory boolValue]) {
             [enumerator skipDescendants];
             continue;
           }
    
          if (![isDirectory boolValue]) {
              [mutableFileURLs addObject:fileURL];
           }
         }

    Para obtener más información sobre NSFileManager su aquí

    • No funcionará si el extenison tiene el ‘.’. En otras palabras, esto va a funcionar: [NSPredicate predicateWithFormat:@»pathExtension ENDSWITH png»];
  6. 4

    Swift 3 (y volviendo Url)

    let url = Bundle.main.resourceURL!
        do {
            let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)
        } catch {
            print(error)
        }
  7. 2

    Swift 4:

    Si tiene que ver con subdirectorios «en Relación con el proyecto de» (carpetas azules) se puede escribir:

    func getAllPListFrom(_ subdir:String)->[URL]? {
        guard let fURL = Bundle.main.urls(forResourcesWithExtension: "plist", subdirectory: subdir) else { return nil }
        return fURL
    }

    Uso:

    if let myURLs = getAllPListFrom("myPrivateFolder/Lists") {
       //your code..
    }
    • Exaclty lo que yo estaba buscando. Gracias !!

Dejar respuesta

Please enter your comment!
Please enter your name here