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];

¿Fue útil?

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
scroll top