Gestion des fichiers en C : Guide du débutant
Les programmes ont généralement besoin d'une structure de données pour stocker les données dont ils peuvent avoir besoin pendant l'exécution. Normalement, ces données sont stockées dans des variables ou des tableaux. Le problème avec ceci est qu'il se perd dès que le programme termine l'exécution. C'est parce qu'il s'agit d'emplacements de mémoire temporaires.
Si vous aviez besoin que vos données soient accessibles même après avoir exécuté un programme, vous devrez les enregistrer dans un fichier. Les fichiers peuvent être soit du texte, soit des binaires.
Cet article se concentre sur la façon dont vous pouvez gérer les fichiers texte en C. Voici ce que vous devez savoir.
Ouvrir un fichier
Tout d'abord, il est important de savoir que vous devez toujours déclarer un pointeur de type FILE lorsque vous travaillez avec des fichiers. Ce pointeur est nécessaire pour permettre la communication entre le fichier et le programme.
FILE *filePtr;
Pour pouvoir écrire, lire ou mettre à jour un fichier, vous devez d'abord l'ouvrir. C fournit la fonction de bibliothèque standard fopen() pour le faire.
Cette fonction prend deux arguments de chaîne : le nom du fichier et le mode. Si le fichier que vous ouvrez ne se trouve pas dans le répertoire du programme dans lequel vous vous trouvez actuellement, vous pouvez fournir son chemin de fichier au lieu d'utiliser simplement le nom du fichier.
Regardez la syntaxe ci-dessous pour savoir comment utiliser fopen() :
filePtr = fopen("filename.txt", "mode");
La variable filePtr est un pointeur de type FILE . Le mode argument fait référence à la façon dont le fichier doit être ouvert. C'est-à-dire quelles fonctions doivent être exécutées sur le fichier.
Il existe trois modes dans lesquels vous pouvez ouvrir un fichier en C. Ces modes sont r, w et a . Pour lire un fichier, utilisez r . Pour écrire dans un fichier, utilisez w . Pour ajouter des données à la fin d'un fichier, utilisez un .
Par exemple, si vous envisagez de lire le contenu d'un fichier appelé programming.txt , vous utiliserez l'instruction ci-dessous :
filePtr = fopen("programming.txt" , "r");
Outre r, w et a , il existe d'autres modes étendus. Vous trouverez ci-dessous une discussion sur ces modes pour les fichiers texte :
r+ et w+ : Ces deux modes sont utilisés pour ouvrir un fichier en lecture et en écriture. La différence est que r+ fait que fopen() renvoie NULL si ce fichier n'existe pas, tandis que w+ crée le fichier à la place. Une autre chose à noter est que w+ écrase un fichier s'il existe.
a+ : Ce mode permet d'ouvrir un fichier pour l'ajout et la lecture. Si le fichier n'existe pas, il est créé.
Écriture et lecture
Vous pouvez utiliser les fonctions fprintf et fscanf respectivement, pour écrire et lire dans un fichier. Ces deux fonctions sont comparables en fonctionnalités aux fonctions printf et scanf dans les E/S de base.
#include <stdio.h>
int main(void){
// pointer declaration
FILE *filePtr;
filePtr = fopen("myfile.txt", "w");
//the message below will be written to myfile.txt
fprintf(filePtr, "%s", "Files are permanent memory locations.");
}
Le code ci-dessus montre comment créer un fichier appelé myfile.txt , puis y stocker un message. Pour lire le contenu du fichier nouvellement créé, consultez le code ci-dessous.
#include <stdio.h>
#include <stdlib.h>
int main(void){
char message[196];
FILE *filePtr;
filePtr = fopen("myfile.txt", "r");
if (filePtr == NULL){
printf("Error opening the file");
//program exists if the pointer returns NULL
exit(1);
}
fscanf(filePtr,"%s", &message);
printf("The message is: %s", message);
fclose(filePtr);
}
Lorsque vous compilez et exécutez le code ci-dessus, votre sortie sera Files. Vous remarquerez qu'il ne s'agit pas du message complet que vous avez stocké dans myfile.txt . Ne vous inquiétez pas cependant. Ce n'est pas un bug dans le code.
Lorsque le programme rencontre un espace, il arrête de lire le contenu du fichier. Si le message était plutôt écrit sous la forme Files-are-permanent-memory-locations, alors vous obtiendriez toute cette sortie sur votre écran.
Dans les deux exemples de code donnés, vous devriez avoir remarqué l'instruction fclose() . Vous devez toujours fermer un fichier (texte ou binaire) après l'avoir utilisé.
Un regard sur la programmation C++
Ayant atteint ce niveau de gestion de fichiers en C, vous êtes probablement un utilisateur supérieur à la moyenne dans la langue. Cela signifie également que vous devriez rechercher des méthodes de programmation plus efficaces.
C++ est la réponse. C'est la version orientée objet de C. Vous devriez maintenant replier vos manches pour apprendre ce langage tendance.