Added extension management

This commit is contained in:
Mylloon 2021-12-22 01:45:28 +01:00
parent fc6b1b92ee
commit f47e7de1ea
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

70
main.c
View file

@ -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;
}