[DRAFT] Read header of the file
This commit is contained in:
parent
b87dc29000
commit
800f2e4c56
2 changed files with 34 additions and 10 deletions
35
arbre.c
35
arbre.c
|
@ -89,7 +89,7 @@ Entete *fichierVersListe(FILE *fichier, int *nombreLettresDansFichier, int *tail
|
|||
|
||||
void compression(FILE *entree, FILE *sortie) {
|
||||
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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
Arbre lectureDonnes(FILE *fichier) {
|
||||
// TODO
|
||||
Arbre lectureDonnees(FILE *fichier, int *tailleTotale) {
|
||||
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
|
||||
}
|
||||
|
||||
void decompression(FILE *entree, FILE *sortie) {
|
||||
/* fclose temporaire pour supprimer les warnings */
|
||||
Arbre arbre = lectureDonnes(entree);
|
||||
huffmanDepuisFichier(sortie, arbre);
|
||||
int tailleTotale; // taille totale en bit du fichier en entrée
|
||||
Arbre arbre = lectureDonnees(entree, &tailleTotale);
|
||||
huffmanDepuisFichier(entree, sortie, arbre, tailleTotale);
|
||||
|
||||
freeArbre(arbre); // on libère l'arbre
|
||||
}
|
||||
|
|
9
arbre.h
9
arbre.h
|
@ -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.
|
||||
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.
|
||||
void huffmanDepuisFichier(FILE *fichier, Arbre arbre);
|
||||
void huffmanDepuisFichier(FILE *entree, FILE *sortie, Arbre arbre, int tailleTotale);
|
||||
|
||||
#endif
|
||||
|
|
Reference in a new issue