makes the extension function more universal

This commit is contained in:
Mylloon 2021-12-27 12:14:40 +01:00
parent b33e0e0519
commit b6623bc0c8
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

37
main.c
View file

@ -6,11 +6,8 @@
// Affiche le message d'aide. // Affiche le message d'aide.
void help(char const progName[]); void help(char const progName[]);
// Ajoute l'extension du fichier compressé au fichier original. // Change l'extension d'un fichier.
char *fichierHuff(const char *fichier); char *fichierExtension(const char *fichier, char *extension);
// Ajoute une extension .txt au fichier décompressé en retirant, s'il existe, l'extension du fichier compressé
char *fichierTXT(const char *fichier);
int main(int argc, char const *argv[]) { int main(int argc, char const *argv[]) {
/* Morceau de code qui m'a permis de testé `liste.c` /* 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]); printf("Compression de %s...\n", argv[1]);
char *nomFichierCompressee = fichierHuff(argv[1]); char *nomFichierCompressee = fichierExtension(argv[1], ".huff");
FILE *sortie = fopen(nomFichierCompressee, "wb"); FILE *sortie = fopen(nomFichierCompressee, "wb");
compression(entree, sortie); // compression du fichier compression(entree, sortie); // compression du fichier
fclose(entree); // fermeture du fichier de base fclose(entree); // fermeture du fichier de base
fclose(sortie); // fermeture du nouveau fichier compressé 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; return 0;
} }
@ -95,13 +92,13 @@ int main(int argc, char const *argv[]) {
printf("Décompression de %s...\n", argv[2]); printf("Décompression de %s...\n", argv[2]);
// char *nomFichierDecompressee = fichierTXT(argv[2]); char *nomFichierDecompressee = fichierExtension(argv[2], ".txt");
FILE *sortie = fopen("tests/fichier_decompresse", "w"); FILE *sortie = fopen(nomFichierDecompressee, "w");
decompression(entree, sortie); // décompression du fichier decompression(entree, sortie); // décompression du fichier
fclose(entree); // fermeture du fichier de base fclose(entree); // fermeture du fichier de base
fclose(sortie); // fermeture du nouveau fichier compressé 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; return 0;
} }
@ -119,7 +116,7 @@ void help(char const progName[]) {
printf("===============================================================================\n"); 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 Récupération informations concernant la position
du dernier point et de la taille du nom du fichier. 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; 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 int tailleNouveauFichier = tailleNomFichier - (tailleNomFichier - positionDernierPoint); // taille fichier sans extension
char *fichierSansExtension; char *fichierSansExtension;
if ((fichierSansExtension = malloc(tailleNouveauFichier * sizeof(char))) == NULL) { // variable du fichier sans son extension, exemple : `text.txt` devient `text` + gestion erreur 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); exit(1);
} }
for (int i = 0; i < tailleNouveauFichier; i++) for (int i = 0; i < tailleNouveauFichier; i++)
fichierSansExtension[i] = fichier[i]; fichierSansExtension[i] = fichier[i];
if((resultat = malloc((tailleNouveauFichier + 5) * sizeof(char))) != NULL) { // +5 car .huff contient 5 caractères 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 resultat[0] = '\0'; // pour être sur que le string est vide
} else { } 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); exit(1);
} }
strcat(resultat, fichierSansExtension); // écrit le nom de l'ancien fichier sans son extension 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 free(fichierSansExtension); // on free le malloc que l'on vient de faire
} else { } else {
if((resultat = malloc((tailleNomFichier + 5) * sizeof(char))) != NULL) { // +5 car .huff contient 5 caractères 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 resultat[0] = '\0'; // pour être sur que le string est vide
} else { } 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); exit(1);
} }
strcat(resultat, fichier); // écrit le nom de l'ancien fichier complètement 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; return resultat;
} }
/* char *fichierTXT(const char *fichier) {
// TODO...
} */