From f47e7de1ea235a484cf3af28a97a94951aa6933e Mon Sep 17 00:00:00 2001 From: Mylloon Date: Wed, 22 Dec 2021 01:45:28 +0100 Subject: [PATCH] Added extension management --- main.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index 054ba13..5847e85 100644 --- a/main.c +++ b/main.c @@ -3,9 +3,12 @@ #include "liste.h" #include "arbre.h" -// Affiche le message d'aide +// Affiche le message d'aide. void help(char const progName[]); +// Ajoute l'extension du fichier compressé au fichier original. +char *fichierHuff(const char *fichier); + int main(int argc, char const *argv[]) { /* Morceau de code qui m'a permis de testé `liste.c` @@ -56,8 +59,21 @@ int main(int argc, char const *argv[]) { help(argv[0]); return 2; } + FILE *entree; + if ((entree = fopen(argv[1], "r")) == NULL) { // ouverture du fichier + gestion erreur + printf("Erreur lors de l'ouverture du fichier.\n"); + return 1; + } - printf("compress..."); + printf("Compression de %s...\n", argv[1]); + + char *nomFichierCompressee = fichierHuff(argv[1]); + FILE *sortie = fopen(nomFichierCompressee, "wb"); + // compression(entree, sortie); // compression du fichier + + fclose(entree); // fermeture du fichier de base + fclose(sortie); // fermeture du nouveau fichier compressé + free(nomFichierCompressee); // free du nom car on a utilisé malloc dans `fichierHuff` return 0; } @@ -68,7 +84,7 @@ int main(int argc, char const *argv[]) { } if (strcmp(argv[1], "-d") == 0 && argc == 3) { // s'il y a 3 arguments et que l'option `d` est renseigné - printf("decompress..."); + printf("Décompression de %s...", argv[1]); return 0; } @@ -85,3 +101,51 @@ void help(char const progName[]) { printf("-> %s --help || Affiche ce message d'aide.\n", progName); printf("===============================================================================\n"); } + +char *fichierHuff(const char *fichier) { + /* + Récupération informations concernant la position + du dernier point et de la taille du nom du fichier. + */ + int positionDernierPoint = -1; + int tailleNomFichier = 0; + while (fichier[tailleNomFichier] != '\0') { + tailleNomFichier++; + if (fichier[tailleNomFichier] == '.') positionDernierPoint = tailleNomFichier; + } + + char *resultat; + if (positionDernierPoint != -1 && tailleNomFichier - positionDernierPoint <= 4) { // s'il y a une extension à la fin du fichier (c-à-d 4 lettres max après le dernier point dans le nom du fichier) + int tailleNouveauFichier = tailleNomFichier - (tailleNomFichier - positionDernierPoint); // taille fichier sans extension + + char *fichierSansExtension; + if ((fichierSansExtension = malloc(tailleNouveauFichier * sizeof(char))) == NULL) { // variable du fichier sans son extension, exemple : `text.txt` devient `text` + gestion erreur + printf("Erreur lors du malloc qui alloue de l'espace pour le nom du fichier compressé (1).\n"); + exit(1); + } + for (int i = 0; i < tailleNouveauFichier; i++) + fichierSansExtension[i] = fichier[i]; + + if((resultat = malloc((tailleNouveauFichier + 5) * sizeof(char))) != NULL) { // +5 car .huff contient 5 caractères + resultat[0] = '\0'; // pour être sur que le string est vide + } else { + printf("Erreur lors du malloc qui alloue de l'espace pour le nom du fichier compressé (2-1).\n"); + exit(1); + } + strcat(resultat, fichierSansExtension); // écrit le nom de l'ancien fichier sans son extension + + free(fichierSansExtension); // on free le malloc que l'on vient de faire + } else { + if((resultat = malloc((tailleNomFichier + 5) * sizeof(char))) != NULL) { // +5 car .huff contient 5 caractères + resultat[0] = '\0'; // pour être sur que le string est vide + } else { + printf("Erreur lors du malloc qui alloue de l'espace pour le nom du fichier compressé (2-2).\n"); + exit(1); + } + strcat(resultat, fichier); // écrit le nom de l'ancien fichier complètement + } + + strcat(resultat, ".huff"); // ajoute l'extension .huff + + return resultat; +}