J'ai un couple de fichiers .tgz dans mon paquet que je veux décompresser et écrire dans un fichier. Je l'ai fonctionné - en quelque sorte. Le problème est que le fichier écrit obtient 512 octets de données de merde en face de lui, mais à part cela, le fichier est décompressé avec succès.zlib iPhone - les fichiers commencent par faire la connerie
alt text http://pici.se/pictures/acbdwGCvX.gif
Je ne veux pas la merde. Si c'est toujours 512 octets, il est bien sûr facile de passer ces derniers et d'écrire les autres. Mais est-ce toujours comme ça? Risqué de faire quelque chose comme ça si l'on ne sait pas pourquoi ces octets sont là en premier lieu.
gzFile f = gzopen ([[[NSBundle mainBundle] pathForResource:file ofType:@"tgz"] cStringUsingEncoding:NSASCIIStringEncoding], [@"rb" cStringUsingEncoding:NSASCIIStringEncoding]);
unsigned int length = 1024*1024;
void *buffer = malloc(length);
NSMutableData *data = [NSMutableData new];
while (true)
{
int read = gzread(f, buffer, length);
if (read > 0)
{
[data appendBytes:buffer length:read];
}
else if (read == 0)
break;
else if (read == -1)
{
throw [NSException exceptionWithName:@"Decompression failed" reason:@"read = -1" userInfo:nil];
}
else
{
throw [NSException exceptionWithName:@"Unexpected state from zlib" reason:@"read < -1" userInfo:nil];
}
}
int writeSucceeded = [data writeToFile:file automatically:YES];
free(buffer);
[data release];
if (!writeSucceeded)
throw [NSException exceptionWithName:@"Write failed" reason:@"writeSucceeded != true" userInfo:nil];
Pourrait-il y avoir une sorte d'info d'en-tête ajoutée par le tgz? – Jasarien