iOS ALAssetsLibrary et NSFileHandle lecture du contenu des fichiers
-
28-10-2019 - |
Question
Je souhaite lire le contenu d'un fichier de bibliothèque d'éléments dans iOS
NSFileHandle fileHandleForReadingFromUrl
utilisant l'url de la ressource defaultRepresentation
semble toujours renvoyer 0x0
...
Je continuerai de chercher une solution en attendant.
MODIFIER:
On dirait la réponse de Anomie pourrait être ce que je veux:
NSUInteger length = [representation getBytes:bytes fromOffset:0 length:[representation size] error:&error];
La solution
Pour les fichiers plus volumineux, vous voudrez probablement copier via une boucle pour lire X octets en morceaux, sinon vous risquez d'épuiser la mémoire de l'appareil.
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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow