Bonjour,
Désolé de poster autant de sujets aujourd’hui mais la remise de mon devoir en C approche à grands pas.
On me demande de gérer 3 fichiers et les potentielles erreurs associées.
J’ai pensé à cette solution pour le fichier main.c :
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc < 4) return 1;
/**
* Ouvrir les trois fichiers au début permet de s'assurer
* qu'ils sont tous disponibles en lecture ou écriture.
**/
FILE* clients = fopen(argv[1], "r");
if (clients == NULL) return 1;
FILE* data = fopen(argv[2], "r");
if (data == NULL) {
fclose(clients); // Sinon fuite de mémoire !
return 1;
}
FILE* output = fopen(argv[3], "w");
if (output == NULL) {
fclose(clients);
fclose(data);
return 1;
}
/**
* Ici se trouve le long code principal qui se charge de traiter les données
* des fichiers clients et data, puis d'insérer le résultat dans output.
**/
fclose(clients);
fclose(data);
fclose(output);
return 0;
}
Comme on le remarque, les lignes 23 et 24 doivent libérer les ressources si le dernier fichier n’a pas su être ouvert.
Pour des opérations aussi simple, le fichier de code est déjà très long !
J’aimerais résumer les lignes 12 à 26 en quelques lignes (genre 5 lignes de code) pour alléger le code de main(). D’ailleurs, je pense que cette fonction n’a pas à gérer les erreurs d’ouverture / fermeture de fichiers.
Bref, existe-t-il une bonne pratique pour gérer les fichiers qui me permettrait de simplifier mon code et le rendre plus propre (en évitant les fuites de mémoire) ?
Sinon, comment auriez-vous fait ?