ios - Obtención de referencias/rutas de archivo de paquete en el inicio de la aplicación
ios5 nsfilemanager (4)
Supongamos que tengo un conjunto arbitrario de archivos incluidos en el Paquete de aplicaciones principal. Me gustaría obtener las URL de los archivos para el lanzamiento y almacenarlas en algún lugar. ¿Es esto posible utilizando NSFileManager
? La documentación no está clara en ese sentido.
Nota: solo necesito las URL del archivo, no necesito acceder a los archivos reales.
Hay una API en NSBundle
( documentation ) disponible en 10.6 o iOS 4 para obtener un NSURL
directamente, en lugar de pasar una ruta al constructor de NSURL
:
- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext;
También tiene variantes que toman un subdirectory
y localizationName
, lo mismo que su -pathForResource:
equivalentes.
O en Swift 4:
let url = Bundle.main.url(forResource: "FileName", withExtension: ".xyz")
Puede obtener la URL de un archivo en el paquete principal usando
NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"];
NSURL *url = [NSURL fileURLWithPath:path];
Puede escribir esta URL en, por ejemplo, un archivo de lista de propiedades en el directorio 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 no conoce los nombres de los archivos y solo desea enumerar todos los archivos del paquete, use
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`
}
Sí, obtendrías su camino:
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"];
EDITAR: para obtener la lista completa de archivos, use NSFileManager, obtenga la ruta al paquete en sí, luego recorra cada directorio para obtener los archivos, haga URL y guárdelos en algún lugar. Hay un montón de código en SO cómo caminar un directorio para hacer esto. [Debes actualizar tu pregunta para que sea más específica sobre lo que quieres, esto no se aclaró en un principio]