iphone - quedan - Obteniendo una lista de archivos en la carpeta Recursos-iOS
donde se guardan los archivos descargados de safari en iphone (7)
Digamos que tengo una carpeta en mi carpeta "Recursos" de mi aplicación de iPhone llamada "Documentos".
¿Hay alguna manera de que pueda obtener una matriz o algún tipo de lista de todos los archivos incluidos en esa carpeta en tiempo de ejecución?
Entonces, en el código, se vería así:
NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];
es posible?
Rápido
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)
}
Otras lecturas:
Swift 4:
Si tiene que ver con subdirectorios "Relativo al proyecto" (carpetas azules) 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..
}
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
}
Recursivamente enumerando 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 here
Puede obtener la ruta al directorio de Resources
esta manera,
NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
A continuación, agregue los Documents
a la ruta,
NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"Documents"];
Luego puede usar cualquiera de las API de listado de directorio de NSFileManager
.
NSError * error;
NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
Nota : Al agregar una carpeta de origen al paquete, asegúrese de seleccionar la opción "Crear referencias de carpeta para cualquier carpeta agregada al copiar"
Puedes 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);
Versión Swift:
if let files = try? FileManager.default.contentsOfDirectory(atPath: Bundle.main.bundlePath ){
for file in files {
print(file)
}
}
Swift 3 (y URL que regresan)
let url = Bundle.main.resourceURL!
do {
let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)
} catch {
print(error)
}