que puede para mini mapas hasta funciona descargar cómo actualizar iphone ios ipad

iphone - puede - ¿Cómo obtengo todas las rutas de recursos en mi paquete recursivamente en iOS?



mapas iphone no funciona (5)

Tengo una carpeta "descomprimida" en mi paquete de aplicaciones. Necesito obtener las rutas de recursos para todos los archivos de tipo txt. He estado usando esto,

NSArray *filePaths = [NSBundle pathsForResourcesOfType:@"txt" inDirectory:[[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/unzipped"]];

Pero solo obtiene archivos en el primer directorio. ¿Hay alguna versión recursiva de esto en algún lugar que me estoy perdiendo?


Pruebe algo como esto:

NSString *bundlePath = [[NSBundle mainBundle] bundlePath]; NSError *error = nil; NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bundlePath error:&error];

''archivos'' será una matriz de cadenas que contienen todos los nombres de archivo en esa ruta ...


Antes de copiar piense en crear un enlace simbólico. Puede crear solo un enlace simbólico a la carpeta con muchos elementos. Y funcionará en la mayoría de las situaciones.

Estará libre de crear otro hilo, esperando el final de la operación, etc.


Solo una actualización de este método para permitir cualquier tipo de archivo (nil) y proporcionar el formato de ruta correcto

- (NSArray *)recursivePathsForResourcesOfType:(NSString *)type inDirectory:(NSString *)directoryPath{ NSMutableArray *filePaths = [[NSMutableArray alloc] init]; NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:directoryPath]; NSString *filePath; while ((filePath = [enumerator nextObject]) != nil){ if (!type || [[filePath pathExtension] isEqualToString:type]){ [filePaths addObject:[directoryPath stringByAppendingPathComponent:filePath]]; } } return filePaths; }


Lo hice trabajando usando el código publicado por @rekle como punto de partida. El truco es usar NSDirectoryEnumerator, que lo hará de forma recursiva. Aquí está la función que escribí en caso de que alguien lo necesite.

- (NSArray *)recursivePathsForResourcesOfType:(NSString *)type inDirectory:(NSString *)directoryPath{ NSMutableArray *filePaths = [[NSMutableArray alloc] init]; // Enumerators are recursive NSDirectoryEnumerator *enumerator = [[[NSFileManager defaultManager] enumeratorAtPath:directoryPath] retain]; NSString *filePath; while ((filePath = [enumerator nextObject]) != nil){ // If we have the right type of file, add it to the list // Make sure to prepend the directory path if([[filePath pathExtension] isEqualToString:type]){ [filePaths addObject:[directoryPath stringByAppendingPathComponent:filePath]]; } } [enumerator release]; return [filePaths autorelease]; }

Swift, usando NSURL

func recursivePathsForResources(type type: String) -> [NSURL] { // Enumerators are recursive let enumerator = NSFileManager.defaultManager().enumeratorAtPath(bundlePath) var filePaths = [NSURL]() while let filePath = enumerator?.nextObject() as? String { if NSURL(fileURLWithPath: filePath).pathExtension == type { filePaths.append(bundleURL.URLByAppendingPathComponent(filePath)) } } return filePaths }


Versión de Swift 3.1 de la respuesta de smokinggoyster

func recursivePathsForResources(type: String, in directoryPath: String) -> [String] { // Enumerators are recursive let enumerator = FileManager.default.enumerator(atPath: directoryPath) var filePaths: [String] = [] while let filePath = enumerator?.nextObject() as? String { if URL(fileURLWithPath: filePath).pathExtension == type { filePaths.append(directoryPath.byAppending(pathComponent: filePath)) } } return filePaths }