[DRAFT] Read header of the file

This commit is contained in:
Mylloon 2021-12-26 15:23:38 +01:00
parent b87dc29000
commit 800f2e4c56
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 34 additions and 10 deletions

35
arbre.c
View file

@ -89,7 +89,7 @@ Entete *fichierVersListe(FILE *fichier, int *nombreLettresDansFichier, int *tail
void compression(FILE *entree, FILE *sortie) { void compression(FILE *entree, FILE *sortie) {
int nombreLettresDansFichier; // initialisé par `listeVersArbre` int nombreLettresDansFichier; // initialisé par `listeVersArbre`
int tailleTotale = 0; // taille totale en en bit du fichier en sortie int tailleTotale = 0; // taille totale en bit du fichier en sortie
Entete *enteteListe = fichierVersListe(entree, &nombreLettresDansFichier, &tailleTotale); Entete *enteteListe = fichierVersListe(entree, &nombreLettresDansFichier, &tailleTotale);
// On écrit l'entête du fichier avec la table complète des correspondances // On écrit l'entête du fichier avec la table complète des correspondances
@ -156,18 +156,39 @@ Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDan
exit(1); exit(1);
} }
Arbre lectureDonnes(FILE *fichier) { Arbre lectureDonnees(FILE *fichier, int *tailleTotale) {
// TODO int nombreLettresDansFichier;
fread(nombreLettresDansFichier, sizeof(int), 1, fichier);
fread(tailleTotale, sizeof(int), 1, fichier);
Entete *entete;
if ((entete = (Entete*)malloc(nombreLettresDansFichier * sizeof(Entete))) == NULL) { // on alloue de la mémoire pour l'entête
printf("Impossible d'allouer de la mémoire supplémentaire (lectureDonnees).\n"); // gestion de l'erreur
exit(1);
} }
void huffmanDepuisFichier(FILE *fichier, Arbre arbre) { Arbre arbre = allouerCellule('\0');
for (int i = 0; i < nombreLettresDansFichier; i++) {
fread(&(entete[i].lettre), sizeof(char), 1, fichier);
fread(&(entete[i].code), sizeof(int), 1, fichier);
fread(&(entete[i].longueur), sizeof(int), 1, fichier);
// ajouter la lettre à l'arbre ici
}
free(entete); // on libère l'entête car on en a plus besoin
return arbre;
}
void huffmanDepuisFichier(FILE *entree, FILE *sortie, Arbre arbre, int tailleTotale) {
// TODO // TODO
} }
void decompression(FILE *entree, FILE *sortie) { void decompression(FILE *entree, FILE *sortie) {
/* fclose temporaire pour supprimer les warnings */ int tailleTotale; // taille totale en bit du fichier en entrée
Arbre arbre = lectureDonnes(entree); Arbre arbre = lectureDonnees(entree, &tailleTotale);
huffmanDepuisFichier(sortie, arbre); huffmanDepuisFichier(entree, sortie, arbre, tailleTotale);
freeArbre(arbre); // on libère l'arbre freeArbre(arbre); // on libère l'arbre
} }

View file

@ -57,10 +57,13 @@ void huffmanVersFichier(FILE *entree, FILE *sortie, Entete *enteteListe, int nom
// Récupère les infos d'une lettre depuis l'entête. // Récupère les infos d'une lettre depuis l'entête.
Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDansFichier); Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDansFichier);
// Lis les données d'un fichier .huff et le transforme en Arbre binaire Huffman (struct Arbre). /*
Arbre lectureDonnes(FILE *fichier); Lis les données d'un fichier .huff et le transforme en Arbre binaire Huffman (struct Arbre).
Définit aussi la taille du fichier.
*/
Arbre lectureDonnees(FILE *fichier, int *tailleTotale);
// Retranscris l'arbre de Huffman en fichier lisible. // Retranscris l'arbre de Huffman en fichier lisible.
void huffmanDepuisFichier(FILE *fichier, Arbre arbre); void huffmanDepuisFichier(FILE *entree, FILE *sortie, Arbre arbre, int tailleTotale);
#endif #endif