2012-08-30 5 views
26

Supongamos que tengo un conjunto arbitrario de archivos incluidos en el paquete de la aplicación principal. Me gustaría buscar las URL de los archivos para aquellos en el lanzamiento y almacenarlos en alguna parte. ¿Es esto posible usando NSFileManager? La documentación no está clara al respecto.Obtención de referencias/rutas de archivos del paquete al iniciar la aplicación

Nota: Solo necesito las URL de los archivos, no necesito acceder a los archivos reales.

+0

¿Qué es un "archivo de referencia"? ¿Camino? URL? ¿Qué? –

+0

Por referencia de archivo me refiero al URL del archivo –

Respuesta

59

Puede obtener la URL de un archivo en el haz principal usando

NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 

Puede escribir este URL para, por ejemplo, un archivo de lista en el directorio de documentos:

NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"]; 
[dict writeToFile:plistPath atomically:YES]; 

Si usted no sabe los nombres de los archivos y lo que desea es una lista de todos los archivos en el paquete, utilice

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL]; 
for (NSString *fileName in files) { 
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    // do something with `url` 
} 
+0

¿Qué pasa si no sé los nombres de los archivos, simplemente quiero obtener todos los archivos allí? –

+0

@AndrewLauerBarinov luego puede leer los documentos de NSFileManager. (Pero vea la edición, de todos modos ...) –

+0

¡Gracias por la información adicional! –

2

Sí, se llega a su paso:

NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"]; 
NSURL *fileURL = [NSURL fileURLWithPath:path] 

// save it as any other object or in a dictionary: 

[myMutableDictionary setObject:fileURL forKey:@"file1.png"]; 

EDIT: para obtener la lista completa de archivos, utilice el NSFileManager, obtener la ruta de acceso al mismo paquete, y luego caminar cada directorio bajar los archivos, haciendo URLs, y guardarlas en alguna parte. Hay montones de código en SO cómo caminar un directorio para hacer esto. [Usted debe actualizar su pregunta para ser más específicos en lo que quiere, esto no quedó claro en absoluto originalmente]

+1

¿Qué pasa si no sé los nombres de los archivos, simplemente quiero obtener todos los archivos allí? –

0

Hay una API de NSBundle (documentation) disponible en 10.6 o iOS 4 para obtener una NSURL directamente, en lugar de pasar un camino a la NSURL constructor:

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext; 

También tiene variantes que tienen una subdirectory y localizationName, lo mismo que sus -pathForResource: equivalentes.

Cuestiones relacionadas