From b6623bc0c898e6758cc9ccaacd5a287319727400 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Mon, 27 Dec 2021 12:14:40 +0100 Subject: [PATCH] makes the extension function more universal --- main.c | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/main.c b/main.c index 27fb1a3..9ce85a5 100644 --- a/main.c +++ b/main.c @@ -6,11 +6,8 @@ // Affiche le message d'aide. void help(char const progName[]); -// Ajoute l'extension du fichier compressé au fichier original. -char *fichierHuff(const char *fichier); - -// Ajoute une extension .txt au fichier décompressé en retirant, s'il existe, l'extension du fichier compressé -char *fichierTXT(const char *fichier); +// Change l'extension d'un fichier. +char *fichierExtension(const char *fichier, char *extension); int main(int argc, char const *argv[]) { /* Morceau de code qui m'a permis de testé `liste.c` @@ -70,13 +67,13 @@ int main(int argc, char const *argv[]) { printf("Compression de %s...\n", argv[1]); - char *nomFichierCompressee = fichierHuff(argv[1]); + char *nomFichierCompressee = fichierExtension(argv[1], ".huff"); 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` + free(nomFichierCompressee); // free du nom car on a utilisé malloc dans `fichierExtension` return 0; } @@ -95,13 +92,13 @@ int main(int argc, char const *argv[]) { printf("Décompression de %s...\n", argv[2]); - // char *nomFichierDecompressee = fichierTXT(argv[2]); - FILE *sortie = fopen("tests/fichier_decompresse", "w"); + char *nomFichierDecompressee = fichierExtension(argv[2], ".txt"); + FILE *sortie = fopen(nomFichierDecompressee, "w"); decompression(entree, sortie); // décompression du fichier fclose(entree); // fermeture du fichier de base fclose(sortie); // fermeture du nouveau fichier compressé - // free(nomFichierDecompressee); // free du nom car on a utilisé malloc dans `fichierTXT` + free(nomFichierDecompressee); // free du nom car on a utilisé malloc dans `fichierExtension` return 0; } @@ -119,7 +116,7 @@ void help(char const progName[]) { printf("===============================================================================\n"); } -char *fichierHuff(const char *fichier) { /* peut posé problème lors de la décompression car on perd définitivement l'extension du fichier originale ? | ajouter un .txt a tous les fichiers sans extensions ?*/ +char *fichierExtension(const char *fichier, char *extension) { /* Récupération informations concernant la position du dernier point et de la taille du nom du fichier. @@ -132,41 +129,37 @@ char *fichierHuff(const char *fichier) { /* peut posé problème lors de la déc } 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) + if (positionDernierPoint != -1 && tailleNomFichier - positionDernierPoint <= 5) { // 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 [on compte le point]) 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"); + printf("Erreur lors du malloc qui alloue de l'espace pour le nom du fichier avec une nouvelle extension (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 + if((resultat = malloc((tailleNouveauFichier + strlen(extension)) * sizeof(char))) != NULL) { // on ajoute la taille de l'extension car on va la rajouter au str + 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"); + printf("Erreur lors du malloc qui alloue de l'espace pour le nom du fichier avec une nouvelle extension (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 + if((resultat = malloc((tailleNomFichier + strlen(extension)) * sizeof(char))) != NULL) { // on ajoute la taille de l'extension car on va la rajouter au str + 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"); + printf("Erreur lors du malloc qui alloue de l'espace pour le nom du fichier avec une nouvelle extension (2-2).\n"); exit(1); } strcat(resultat, fichier); // écrit le nom de l'ancien fichier complètement } - strcat(resultat, ".huff"); // ajoute l'extension .huff + strcat(resultat, extension); // ajoute l'extension return resultat; } - -/* char *fichierTXT(const char *fichier) { - // TODO... -} */