iphone - sesion - ¿Lista de archivos guardados en el directorio de documentos iOS en un UITableView?
importar fotos de iphone a pc (8)
Aquí está el método que utilizo para obtener el contenido de un directorio.
-(NSArray *)listFileAtPath:(NSString *)path
{
//-----> LIST ALL FILES <-----//
NSLog(@"LISTING ALL FILES FOUND");
int count;
NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];
for (count = 0; count < (int)[directoryContent count]; count++)
{
NSLog(@"File %d: %@", (count + 1), [directoryContent objectAtIndex:count]);
}
return directoryContent;
}
He configurado el siguiente código para guardar un archivo en el directorio de documentos:
NSLog(@"Saving File...");
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.reddexuk.com/logo.png"]];
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"logo.png"];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[operation start];
Sin embargo, deseo agregar cada archivo a un UITableView cuando se guarda con éxito. Cuando se toca el archivo en el UITableView, me gustaría que un UIWebView navegue a ese archivo (todo fuera de línea).
Además, ¿cómo puedo obtener el nombre de archivo y la terminación, como "logo.png" en lugar de http://www.reddexuk.com/logo.png ?
¿Cómo puedo hacer esto?
Gracias alex
Aquí está la versión Swift
func listFilesOnDevice() {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentDirectory = paths[0] as! String
let manager = NSFileManager.defaultManager()
if let allItems = manager.contentsOfDirectoryAtPath(documentDirectory, error: nil) {
println(allItems)
}
}
Para obtener los contenidos de un directorio.
- (NSArray *)ls {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory];
NSLog(@"%@", documentsDirectory);
return directoryContent;
}
Para obtener el último componente de la ruta,
[[path pathComponents] lastObject]
Para un nombre de archivo más razonable:
NSString *filename = [[url lastPathComponent] stringByAppendingPathExtension:[url pathExtension]];
Sé que esta es una pregunta antigua, pero es buena y las cosas han cambiado en iOS después de Sandboxing.
La ruta a todas las carpetas legibles / de escritura dentro de la aplicación ahora tendrá un hash y Apple se reserva el derecho de cambiar esa ruta en cualquier momento. Cambiará en cada lanzamiento de la aplicación con seguridad.
Necesitará obtener la ruta a la carpeta que desea y no puede codificarla como lo hacíamos en el pasado.
Solicita el directorio de documentos y, en la matriz de retorno, se encuentra en la posición 0. Luego, a partir de ahí, utiliza ese valor para suministrar al NSFileManager para obtener los contenidos del directorio.
El siguiente código funciona bajo iOS 7 y 8 para devolver una matriz de los contenidos dentro del directorio de documentos. Es posible que desee ordenarlo de acuerdo con sus propias preferencias.
+ (NSArray *)dumpDocumentsDirectoryContents {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSError *error;
NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
NSLog(@"%@", directoryContents);
return directoryContents;
}
Swift 3.x
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
if let allItems = try? FileManager.default.contentsOfDirectory(atPath: documentDirectory) {
print(allItems)
}
-(NSArray *)findFiles:(NSString *)extension{
NSMutableArray *matches = [[NSMutableArray alloc]init];
NSFileManager *fManager = [NSFileManager defaultManager];
NSString *item;
NSArray *contents = [fManager contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] error:nil];
// >>> this section here adds all files with the chosen extension to an array
for (item in contents){
if ([[item pathExtension] isEqualToString:extension]) {
[matches addObject:item];
}
}
return matches; }
El ejemplo anterior es bastante autoexplicativo. Espero que te responda la segunda pregunta.
NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:dir_path];
NSString *filename;
while ((filename = [dirEnum nextObject]))
{
// Do something amazing
}
para enumerar a través de TODOS los archivos en el directorio