Manipulation des fichiers en c Techniques d’Indexation et Recherche Multimédia
Manipulation des fichiers en c Techniques d’Indexation et Recherche Multimédia Amira JOUIROU Plan A. Ouvrir et fermer un fichier B. Ecrire et lire dans un fichier C. Se déplacer dans un fichier D. Renommer et supprimer un fichier 2 Ouvrir et fermer un fichier Insertion des bibliothèques: #include<stdio.h> #include<stdlib.h> 1. Insertion de la fonction d'ouverture de fichier fopen qui nous renvoie un pointeur sur le fichier. 2. Vérification de l'ouverture (c'est-à-dire si le fichier existait) en testant la valeur du pointeur qu'on a reçu. Si le pointeur vaut NULL: l'ouverture du fichier n'a pas marché, dans ce cas on ne peut pas continuer (il faut afficher un message d'erreur). Si le pointeur est différent de NULL : l'ouverture a marché, alors on peut s'amuser à lire et écrire dans le fichier. 3. Une fois qu'on a terminé de travailler sur le fichier, il faut penser à le "fermer" avec la fonction fclose. 3 Ouvrir et fermer un fichier fopen : ouverture du fichier • Le prototype de la fonction fopen FILE* fopen(const char* nomDuFichier, const char* modeOuverture); • Cette fonction attend 2 paramètres Le nom du fichier à ouvrir. Le mode d'ouverture du fichier, c'est-à-dire une indication qui dit si vous voulez juste écrire dans le fichier, juste lire dans le fichier, ou les deux à la fois • Cette fonction renvoie un pointeur sur FILE 4 Ouvrir et fermer un fichier fopen : ouverture du fichier • Un pointeur sur une structure de type FILE, qui est définit dans stdio.h • fopen renvoie un FILE* • Récupération de ce pointeur pour pouvoir ensuite lire et écrire dans le fichier • Création d’un pointeur de FILE au début de notre fonction Int main(int argc, char* argv[]) { FILE* fichier=NULL; return0; } • Le pointeur est initialisé à NULL dès le début. Rq: c'est une règle fondamentale d'initialiser les pointeurs à NULL dès le début si on n'a pas d'autre valeur à leur donner, si vous ne le faites pas, vous risquez de planter le système par la suite. • Appeler la fonction fopen et récupérer la valeur qu'elle renvoie dans le pointeur "fichier" 5 Ouvrir et fermer un fichier fopen : ouverture du fichier Les modes d'ouvertures possibles • "r" : lecture seule. Lire le contenu du fichier, mais ne pas écrire dedans. Le fichier doit avoir été créé au préalable. • "w" : écriture seule. Écrire dans le fichier, mais ne pas lire son contenu. Si Le fichier n'existe pas, il sera créé. • "a" : mode d'ajout. Écrire dans le fichier, en partant de la fin du fichier. Rajouter donc du texte à la fin du fichier. Si le fichier n'existe pas, il sera créé. • "r+" : lecture et écriture. Lire et écrire dans le fichier. Le fichier doit avoir été créé au préalable. • "w+" : lecture et écriture, avec suppression du contenu au préalable. Le fichier est donc d'abord vidé de son contenu, et ensuite écrire et lire dedans. Si le fichier n'existe pas, il sera créé. • "a+" : ajout en lecture/écriture à la fin. Écrire et lire du texte à partir de la fin du fichier. Si le fichier n'existe pas, il sera créé. 6 Ouvrir et fermer un fichier fopen : ouverture du fichier • Le code suivant ouvre le fichier test.txt en mode "r+" (lecture / écriture) Int main(int argc, char* argv[]) { FILE* fichier= NULL; fichier=fopen("test.txt", "r+"); return 0; } • Le pointeur "fichier" devient alors un pointeur sur "test.txt". 7 Ouvrir et fermer un fichier fopen : ouverture du fichier Où doit être situé test.txt ? • Il doit être situé dans le même dossier que votre projet (*.cbp). • Pour les besoins de ce chapitre, créez un fichier "test.txt" dans le même dossier que le *.cbp (Project file:fichier.cbp) Le fichier doit-il être de type .txt ? • Non. C'est vous qui choisissez l'extension lorsque vous ouvrez le fichier. Vous pouvez très bien inventer votre propre format de fichier ".niveau" pour enregistrer les niveaux de vos jeux par exemple. 8 Ouvrir et fermer un fichier fopen : ouverture du fichier Le fichier doit-il être obligatoirement dans le même répertoire que l'exécutable ? • Non plus. Il peut être dans un sous-dossier: fichier=fopen("dossier/test.txt", "r+"); Ici, le fichier test.txt est dans un sous-dossier appelé "dossier". => Cette méthode, que l'on appelle chemin relatif est plus pratique. • Il est aussi possible d'ouvrir un autre fichier n'importe où ailleurs sur le disque dur. Dans ce cas, il faut écrire le chemin complet (ce qu'on appelle le chemin absolu): fichier=fopen("C:\\ProgramFiles\\Notepad++\\readme.txt","r+"); Ce code ouvre le fichier readme.txt situé dans "C:\Program Files\Notepad++". => Il faut mettre 2 anti slash \. Si on mit un seul, l’ordinateur aurait cru qu’on essaie d'insérer un symbole spécial comme \n ou \t. 9 Ouvrir et fermer un fichier Tester l'ouverture du fichier • Le pointeur "fichier" devrait contenir l'adresse de la structure de type FILE qui sert de descripteur de fichier. Celui-ci a été chargé en mémoire pour vous par la fonction fopen(). • A partir de là, 2 possibilités: • Soit l'ouverture a réussi, et vous pouvez continuer (c.-à-d. commencer à lire et écrire dans le fichier). • Soit l'ouverture a échoué parce que le fichier n'existait pas ou était utilisé par un autre programme. Dans ce cas, vous devez arrêter de travailler sur le fichier. • Juste après l'ouverture du fichier, il FAUT absolument vérifier si l'ouverture a réussi ou pas. • Si le pointeur vaut NULL, l'ouverture a échoué. • S'il vaut autre chose que NULL, l'ouverture a réussi. 10 Ouvrir et fermer un fichier Tester l'ouverture du fichier int main(int argc, char*argv[]) { FILE* fichier =NULL ; fichier=fopen("test.txt", "r+"); if(fichier !=NULL) { printf("On peut lire et ecrire dans le fichier"); } else { // On affiche un message d'erreur si on veut printf("Impossible d'ouvrir le fichier test.txt"); } return 0; } 11 Ouvrir et fermer un fichier fclose : fermer le fichier • Une fois que vous aurez fini de travailler avec le fichier, il faudra le "fermer". On utilise pour cela la fonction fclose qui a pour rôle de libérer la mémoire (c.-à-d. supprimer votre fichier chargé dans la mémoire vive) • Le prototype de la fonction fclose int fclose (FILE* pointeurSurFichier); • Cette fonction prend un paramètre : votre pointeur sur le fichier. • Elle renvoie un entier (int) qui indique si elle a réussi à fermer le fichier. Cet entier vaut : • 0 : si la fermeture a marché • EOF : si la fermeture a échoué. EOF est un define situé dans stdio.h qui correspond à un nombre spécial, utilisé pour dire soit qu'il y a eu une erreur, soit qu'on est arrivé à la fin du fichier. Dans le cas présent cela signifie qu'il y a eu une erreur. • Pour fermer le fichier, on va donc écrire : fclose(fichier); 12 Ouvrir et fermer un fichier • Tout simplement, le schéma que nous allons suivre pour ouvrir et fermer un fichier sera le suivant Int main(intargc, char*argv[]) { FILE*fichier=NULL; fichier = fopen("test.txt", "r+"); if(fichier != NULL){ // On lit et on écrit dans le fichier // ... fclose(fichier);// On ferme le fichier qui a été ouvert } return0; } 13 Plan A. Ouvrir et fermer un fichier B. Ecrire et lire dans un fichier C. Se déplacer dans un fichier D. Renommer et supprimer un fichier 14 Ecrire et lire dans un fichier Ecriture • fputc : écrire un caractère (UN SEUL caractère à la fois) • fputs : écrire une chaîne • fprintf : écrire une chaîne "formatée", fonctionnement quasi-identique à printf 15 Ecrire et lire dans un fichier Ecriture avec fputc • Prototype int fputc(int caractère, FILE* pointeurSurFichier); • Prendre 2 paramètres • Le caractère à écrire • Le pointeur sur le fichier dans lequel écrire • Retourner un entier (int) • Si l’écriture a échoué, cet int vaut EOF • Sinon, cet int vaut autre chose • Exemple: écrire un code c qui permet d’écrire la lettre ‘S’ dans test.txt. 16 Ecrire et lire dans un fichier Ecriture avec fputs • Prototype int fputs (const char* chaine, FILE* pointeurSurFichier); • Prendre 2 paramètres • La chaine à écrire • Le pointeur sur le fichier dans lequel écrire • Retourner un entier (int) • Si l’écriture a échoué, cet int vaut EOF • Sinon, cet int vaut autre chose • Exemple: écrire un code c qui permet d’écrire " Salut L2CS" dans test.txt. 17 Ecrire et lire dans un fichier Ecriture avec fprintf • S'utiliser de la même manière que printf , sauf qu’il faut indiquer un pointeur de FILE en premier paramètre. • Exemple: écrire un code c qui demande l'âge de l’utilisateur et l’écrit dans le fichier. 18 Ecrire et lire dans un fichier Lecture • fgetc : lire un caractère • fgets : lire une chaîne • fscanf : lire une chaîne formatée 19 Ecrire et lire dans un fichier Lecture avec fgetc • Prototype int fgetc (FILE* pointeurDeFichier); • Retourner un int • uploads/Geographie/ abkbkbbkjjv.pdf
Documents similaires
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/h936vZXSSyxczm2qyCZSPbwEI4LjFEywsKOn9aLNhFMxCVQDhvHq9LirDS0mIvxgG5I44q3Z4QXLaFi5j79Z3tqr.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/T9wx1I7HR5fYUmFrxfKKMoVtKhzsnb6IwMwV4MPMFiFMdTrdGK95VzpZca6TrO3XMMj02XimiIbJ4snWwhtGCF31.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/Lg1iL4WXVN6P34QXEXlAk6cGnme8eBJ7iiefIptdPh3kMEmOBrXsbPqnwmnYEqTxy4jC9bRVQZFP87O3CnHqN6x8.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/K1BX4FJyJoCNgy4mdVaUioStoItUItUa17YHumzep7LBh9kiC8Z0idFuwxv8s2nNpAM0KVJosoCOSLh1qq7xes6S.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/zk4Xmjbsnl7gFEEeua8Ce5h8MfOTnXd9Kuxr0F3B44UbsyI3P8EIEPGOx6j4eUrBMddMGrWDbNBs9NQfrCwE1RfK.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/uoEJumKbNLOgdhBcdR64DCzq6jAAxbMd8mCeAaH27iM1K9scRPj0h4BvI2CZaUzMiDoRiqFiTA9ZpCkhl8x4mrVV.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/MMmpfHAXYyyoB7aRFxr0zloKLdHTnx8pq9lD17dkKUENjgCeEcv3g1TgrEAS0FLaCdenvu0yUL87iq4kGeBpGn81.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/Wk6QNgZgOzPD9aicepOCsSmx4I11MtbA804iKjV66w5n7DFpZeo0WR22rR4NK6ggEq6ATICkhG6yibeEwynjjtGa.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/87kZXRtvXiMyLuRhL7KCsBfD9X3sfKDdKSiFfnEOQQw1X5fLICGSj9iyVeHzUFFE3gutmpVE4MTSyRtnSzavyTuF.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/UM169q2mEY1ituzDjLCzmDrj3NSd0phOmqZCiAzO1GbUT6pHGiIjzH431dZNtpKU7xrrxIxS9c4YOH40szVABVAF.png)
-
22
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 13, 2021
- Catégorie Geography / Geogra...
- Langue French
- Taille du fichier 0.8039MB