iOS alassetslibrary y nsfilehandle de lectura contenido del archivo
-
28-10-2019 - |
Pregunta
Quiero leer el contenido de un archivo de biblioteca de activos en iOS
NSFileHandle fileHandleForReadingFromUrl
Usando el activo defaultRepresentation
URL parece volver siempre 0x0
...
Seguiré buscando una solución mientras tanto.
EDITAR:
Parece la respuesta de Anomia podría ser lo que quiero:
NSUInteger length = [representation getBytes:bytes fromOffset:0 length:[representation size] error:&error];
Solución
Para archivos más grandes, probablemente desee copiar a través de un bucle para leer los bytes X en fragmentos, de lo contrario puede agotar la memoria en el dispositivo.
NSUInteger chunkSize = 100 * 1024;
uint8_t *buffer = malloc(chunkSize * sizeof(uint8_t));
ALAssetRepresentation *rep = [myasset defaultRepresentation];
NSUInteger length = [rep size];
NSFileHandle *file = [[NSFileHandle fileHandleForWritingAtPath: tempFile] retain];
if(file == nil) {
[[NSFileManager defaultManager] createFileAtPath:tempFile contents:nil attributes:nil];
file = [[NSFileHandle fileHandleForWritingAtPath:tempFile] retain];
}
NSUInteger offset = 0;
do {
NSUInteger bytesCopied = [rep getBytes:buffer fromOffset:offset length:chunkSize error:nil];
offset += bytesCopied;
NSData *data = [[NSData alloc] initWithBytes:buffer length:bytesCopied];
[file writeData:data];
[data release];
} while (offset < length);
[file closeFile];
[file release];
free(buffer);
buffer = NULL;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow