Il n'y a pas moyen facile d'obtenir la taille d'un fichier non compressé gzip, peu de décompressant et en utilisant la fonction getfsize(). Ce n'est peut-être pas ce que tu veux. J'ai pris un coup d'oeil à RFC 1952 - GZIP File Format Specification, et la seule chose qui pourrait être utile est le champ ISIZE, qui contient "... la taille de l'original (non compressé) des données d'entrée modulo 2^32".
EDIT:
Je ne sais pas si cela aide, mais voici une preuve de concept code C j'ai jeté ensemble qui récupère la valeur du champ iSize dans un fichier gzip. Cela fonctionne pour moi en utilisant Linux et gcc, mais votre kilométrage peut varier. Si vous compilez le code, puis passez un nom de fichier gzip en tant que paramètre, il vous indiquera la taille non compressée du fichier d'origine.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fp = NULL;
int i=0;
if (argc != 2) {
fprintf(stderr, "Must specify file to process.\n");
return -1;
}
// Open the file for reading
if ((fp = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "Unable to open %s for reading: %s\n", argv[1], strerror(errno));
return -1;
}
// Look at the first two bytes and make sure it's a gzip file
int c1 = fgetc(fp);
int c2 = fgetc(fp);
if (c1 != 0x1f || c2 != 0x8b) {
fprintf(stderr, "File is not a gzipped file.\n");
return -1;
}
// Seek to four bytes from the end of the file
fseek(fp, -4L, SEEK_END);
// Array containing the last four bytes
unsigned char read[4];
for (i=0; i<4; ++i) {
int charRead = 0;
if ((charRead = fgetc(fp)) == EOF) {
// This shouldn't happen
fprintf(stderr, "Read end-of-file");
exit(1);
}
else
read[i] = (unsigned char)charRead;
}
// Copy the last four bytes into an int. This could also be done
// using a union.
int intval = 0;
memcpy(&intval, &read, 4);
printf("The uncompressed filesize was %d bytes (0x%02x hex)\n", intval, intval);
fclose(fp);
return 0;
}
Quel est le problème avec ma réponse ci-dessous? –
J'en ai besoin pour écrire des scripts vim, pour comparer la taille du tampon. : les commandes n'aident pas là. –
Aurait dû être mentionné dans la question? –