2011-10-26 15 views
10

Quiero que el usuario seleccione cualquier archivo presente en su iPhone para que se use como un archivo adjunto de correo electrónico. Para este propósito, quiero mostrar la lista de todos los archivos y carpetas presentes en el iPhone. ¿Pero cómo obtendría la lista de esos archivos? ¿Hay alguna forma de obtener esa lista?¿Cómo enumerar todas las carpetas y sus subdirectorios/archivos en el SDK de iPhone?

+0

Pero por ejemplo tengo archivo .pdf presente en algún lugar del disco duro del iPhone y quiero para localizar el archivo o si desea obtener la ruta de ese archivo que ... ?? ? –

+0

No todos los archivos se almacenan en la zona de pruebas de la aplicación. Puede decirle al sistema que su aplicación es compatible con PDF y permitir que otras aplicaciones envíen archivos PDF de su aplicación. No hay otra manera de hacerlo. – rckoenes

Respuesta

18

Tenga en cuenta que su aplicación se ejecuta en un entorno limitado y no podría obtener ninguna carpeta/archivo fuera de ese entorno limitado.

ObjectiveC

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSFileManager *manager = [NSFileManager defaultManager]; 
NSArray *fileList = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil]; 
for (NSString *s in fileList){ 
    NSLog(@"%@", s); 
} 

Swift 4

guard let documentsDirectory = try? FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) else { return } 
guard let fileEnumerator = FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions()) else { return } 
while let file = fileEnumerator.nextObject() { 
    print(file) 
} 
5

Ésta es la más lenta de aproximación (?):

NSFileManager * fileManager = [NSFileManager new]; 
NSArray * subpaths = [fileManager subpathsAtPath:path]; 

pero que debería al menos que apuntan a una mayor impl especializado ementación para sus necesidades.

Las abstracciones de nivel ligeramente inferiores que le permiten enumerar a pedido incluyen NSDirectoryEnumerator y CFURLEnumerator. Dependiendo de la profundidad del directorio, estos tienen el potencial de guardar muchas interacciones innecesarias con el sistema de archivos, en comparación con -[NSFileManager subpathsAtPath:].

+0

¿Puede mencionar el valor de la variable "ruta" en la segunda línea? –

+0

@Muhammed Bueno, no tiene acceso a ningún archivo en ninguna parte del sistema de archivos porque es un espacio aislado.* Tienes * acceso a los datos locales de tu aplicación: el 'documentsDirectory' de simpleBob demuestra cómo obtendrás esa ruta. – justin

+0

Gracias por su respuesta, una pequeña confusión. ¿Qué pasa si mis archivos están presentes en la carpeta de fotos de iPhone? ¿Tengo acceso a él? Quiero decir que puedo listar todos los archivos presentes en la carpeta de fotos. –

3

Puede utilizar NSDirectoryEnumerator través NSFileManager.enumeratorAtPath

A partir de los documentos:

NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"]; 
NSFileManager *localFileManager=[[NSFileManager alloc] init]; 
NSDirectoryEnumerator *dirEnum = 
    [localFileManager enumeratorAtPath:docsDir]; 

NSString *file; 
while ((file = [dirEnum nextObject])) { 
    if ([[file pathExtension] isEqualToString: @"doc"]) { 
     // process the document 
     [self scanDocument: [docsDir stringByAppendingPathComponent:file]]; 
    } 
} 
1

Soy un autor de FileExplorer de control que es un explorador de archivos para iOS y cumple con la mayoría de sus necesidades. Tenga en cuenta que le permite explorar solo aquellos archivos y directorios que se colocan dentro de su sandbox.

Estas son algunas de las características de mi control:

  1. Posibilidad de elegir los archivos y/o directorios si hay una necesidad de que
  2. Posibilidad de eliminar los archivos y/o directorios si hay una Necesidad de eso
  3. Función de búsqueda incorporada
  4. Ver archivos de audio, video, imagen y PDF.
  5. Posibilidad de agregar compatibilidad con cualquier tipo de archivo.

Puede encontrar mi control here.

2

rápida 3

let fileManager:FileManager = FileManager() 
    let files = fileManager.enumerator(atPath: NSHomeDirectory()) 
    while let file = files?.nextObject() { 
     print("Files::",file) 
    } 
Cuestiones relacionadas