Partage de technologie

[Langage C] Jouer avec les opérations sur les fichiers

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

🌟🌟Page d'accueil de l'auteur :éphémères__

🌟🌟Colonne d'appartenance :langage C

Table des matières

introduction

1. Ouverture et fermeture de fichiers

1. flux

2. Débit standard

3. Fichiers texte et fichiers binaires

4. Fonctions qui contrôlent l'ouverture et la fermeture des fichiers

2. Lecture et écriture séquentielles de fichiers

3. Lecture et écriture aléatoires de fichiers

1.fonction fseek

2.Fonction ftell

3. fonction de rembobinage

4. Détermination de la fin de lecture du fichier

Résumer


introduction

Lorsque nous écrivons des programmes, nous stockons souvent des données dans des variables. Si le programme se termine et que la mémoire est récupérée, ces données seront perdues. Existe-t-il donc un moyen pour nous de sauvegarder ces données de manière persistante afin qu'elles existent toujours lorsque le programme est à nouveau ouvert ? La réponse est oui. Qu'est-ce que cela peut faire, c'est :Opérations sur les fichiers

1. Ouverture et fermeture de fichiers

1. flux

Les données du programme doivent être sorties vers des périphériques externes, et elles doivent également être entrées à partir de périphériques externes. Pour différents appareils, les méthodes d'entrée et de sortie sont différentes. Afin de faciliter nos opérations sur divers périphériques d'entrée et de sortie, nous avons le concept très abstrait de "stream". Dans le langage C, les opérations d'entrée et de sortie sur les fichiers, les écrans, les claviers, etc. sont toutes effectuées via des « flux ». En général, si nous voulons écrire ou lire des données, nous devons ouvrir le flux.

2. Débit standard

Lorsqu'un programme en langage C est démarré, sa valeur par défaut esttrois fluxDéjà ouvert pour nous :

entrée standard--Flux d'entrée standard, saisie à partir du clavier dans la plupart des cas.

sortie standard--Flux de sortie standard, sortie vers le moniteur dans la plupart des cas.

erreur d'erreur--Flux d'erreurs standard, sortie sur le moniteur dans la plupart des cas.

Étant donné que ces trois flux ont été ouverts par défaut, nous pouvons effectuer directement des opérations d'entrée et de sortie à l'aide de fonctions telles que scanf et printf.

Ces trois flux ont également des types. Leurs types sont :Pointeur de fichier (FILE*) .Lorsque nous effectuons des opérations sur les fichiers, nous passonsLa variable de pointeur de fichier peut trouver indirectement le fichier qui lui est associé.

3. Fichiers texte et fichiers binaires

Selon la manière dont les données sont organisées, les fichiers de données sont appelésfichier texteoufichier binaire . Les données sont stockées sous forme binaire en mémoire,S'il est sorti vers un fichier de stockage externe sans conversion, il estfichier binaire
S'il doit être stocké en code ASCII dans un stockage externe, il doit être converti avant le stockage.Un fichier stocké sous forme de caractères ASCII estfichier texte
Comment une donnée est-elle stockée dans un fichier ?
Les caractères sont toujours stockés sous forme ASCII et les données numériques peuvent être stockées sous forme ASCII ou binaire. Par exemple, s'il y a un entier 10000, s'il est sorti sur le disque sous forme de code ASCII, il occupera 5 octets sur le disque (un octet pour chaque caractère), tandis que s'il est sorti sous forme binaire, il n'occupera que 4 octets sur le disque.

4. Fonctions qui contrôlent l'ouverture et la fermeture des fichiers

Après avoir compris ces connaissances préalables, entrons dans le vif du sujet : ouvrir et fermer des fichiers. Le langage C fournit deux fonctions, qui sont respectivement responsables de l'ouverture et de la fermeture des fichiers. Les prototypes sont les suivants :

ouvrir un fichier :
DÉPOSER * fouvrir ( const char * nom de fichier, const char * mode );
Fermez le fichier :
int fermer ( FICHIER * flux );

La fonction fopen a deux paramètres,Le premier paramètre est exprimé sous forme de chaînenom de fichier, le deuxième paramètre est le fichierMéthode ouverte, représenté par une chaîne .Lors de l'utilisation de cette fonction, nous devons créer unvariable de pointeur de fichier Pour recevoir, lorsque le fichier ne s'ouvre pas, il renvoie un pointeur nul. Concernant les méthodes d'ouverture, voici les suivantes :

Méthode ouvertesignificationSi le fichier spécifié n'existe pas
"r" (lecture seule)
Pour saisir des données, ouvrez un fichier texte existant
Renvoie un pointeur nul
"w" (écriture uniquement)
Pour sortir des données, ouvrez un fichier texte
Créer un nouveau fichier
"a" (ajouter)Ajouter des données à la fin du fichier texteCréer un nouveau fichier
"rb" (lecture seule)Pour saisir des données, ouvrez un fichier binaireRenvoie un pointeur nul
"wb" (écriture uniquement)Pour sortir des données, ouvrez un fichier binaireCréer un nouveau fichier
"ab" (ajouter)Ajouter des données à la fin d'un fichier binaireCréer un nouveau fichier
"r+" (lecture et écriture)Pour lire et écrire, ouvrez un fichier texteRenvoie un pointeur nul
"w+" (lecture et écriture)Pour la lecture et l'écriture, créez un nouveau fichier texteCréer un nouveau fichier
"a+" (lire et écrire)Ouvrir un fichier et lire et écrire à la fin du fichierCréer un nouveau fichier
"rb+" (lecture et écriture)Ouvrir un fichier binaire en lecture et en écritureRenvoie un pointeur nul
"wb+" (lecture et écriture)
Pour la lecture et l'écriture, créez un nouveau fichier binaireCréer un nouveau fichier
"ab+" (lecture et écriture)
Ouvrez un fichier binaire et lisez et écrivez à la fin du fichierCréer un nouveau fichier

Pour la fonction fclose, son paramètre est le pointeur de fichier, qui permet de fermer le fichier pointé par le pointeur de fichier.

Ensuite, nous essayons d'ouvrir et de fermer un fichier :

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");
  5. if (pf == NULL)//文件打开失败则退出程序
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. printf("文件打开成功n");
  11. fclose(pf);
  12. pf = NULL;//避免出现野指针,及时制空
  13. return 0;
  14. }
résultat de l'opération :

On peut voir que puisque la méthode d'ouverture est "w", un fichier nommé "test.txt" apparaît dans le chemin.

2. Lecture et écriture séquentielles de fichiers

Ensuite, nous introduisons plusieurs fonctions pourLire ou écrire des données dans un fichier

Nom de la fonctionFonctionApplicable à
fgetcFonction de saisie de caractèresTous les flux d'entrée
fputcfonction de sortie de caractèresTous les flux de sortie
fgetsFonction de saisie de ligne de texteTous les flux d'entrée
entréesFonction de sortie de ligne de texteTous les flux de sortie
fscanfFonction de saisie du formatTous les flux d'entrée
fprintfFonction de sortie de formatage Tous les flux de sortie
peurEntrée binaireFlux d'entrée de fichier
écrireSortie binaireFlux de sortie de fichier

Ensuite, nous essayons d'utiliserfscanfetfprintffonction:

Le premier paramètre de ces deux fonctions est un pointeur de fichier, utilisé pour lire et écrire des données de fichier. Les paramètres suivants sont les mêmes que les fonctions scanf et printf.

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
  5. if (pf == NULL)
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. fprintf(pf, "123456");//向文件中写入数据
  11. fclose(pf);
  12. pf = NULL;
  13. return 0;
  14. }

Comme vous pouvez le constater, les données ont été écrites dans le fichier. Ensuite, nous utilisons la fonction fscanf pour imprimer les données du fichier à l'écran :

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char str[20] = { 0 };
  5. FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
  6. if (pf == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. fscanf(pf, "%s", str);//读取数据到str当中
  12. printf(str);
  13. fclose(pf);
  14. pf = NULL;
  15. return 0;
  16. }
résultat de l'opération :

3. Lecture et écriture aléatoires de fichiers

1.fonction fseek

La fonction de la fonction fseek estBasé sur la position et le décalage du pointeur de fichierpositionpointeur de fichier . Son prototype est le suivant :

int fseek ( FICHIER * flux, long int décalage, int origine );

Son premier paramètre est le pointeur de fichier, le deuxième paramètre est le décalage par rapport à la position définie et le troisième paramètre est la position définie.

Le langage C définit troisMacro, vous pouvez en choisir un comme troisième paramètre :

SEEK_SET : position de départ du fichier

SEEK_CUR : La position actuelle du pointeur de fichier

SEEK_END : fin du fichier

Après avoir localisé le pointeur de fichier, nous pouvons lire ou écrire à l'emplacement spécifié du fichier.

2.Fonction ftell

La fonction ftell est utilisée pour renvoyerLe décalage du pointeur de fichier par rapport à la position de départ . Prototype de fonction :

long int ftell ( FICHIER * flux );

3. fonction de rembobinage

la fonction de rembobinage est utilisée pourRemettre la position du pointeur de fichier au début du fichier . Son prototype de fonction :

void rewind ( FICHIER * flux );

4. Détermination de la fin de lecture du fichier

1. Pourfichier texte, on peut d'abord utiliserfgetcLa fonction parcourt les caractères du fichier jusqu'à ce que EOF soit lu, indiquantLa lecture du fichier se termine

2. Pourfichier binaire,Nous utilisonspeurLa fonction détermine sa valeur de retour :Est-ce inférieur au nombre réel à lire ? .S'il est inférieur àLa lecture se termine.

Pour les deux cas ci-dessus, le dossierEn fin de lecture, nous pouvons continuer à jugerRaison pour laquelle la lecture du fichier s'est terminée . Introduire deux fonctions :feofetferror

feofFonction utilisée pourDéterminer la fin de la lecture du fichierraisonque ce soit ou nonFin de fichier rencontrée . Son prototype est le suivant :

int feof ( FICHIER * flux );

Si le fichier est dû àLire jusqu'à la fin du fichierLorsque la lecture est terminée, EOF est renvoyé ; dans les autres cas, 0 est renvoyé.

        ferrorFonction utilisée pourDéterminer la fin de la lecture du fichierraisonque ce soit ou nonUne erreur d'E/S s'est produite . Le prototype est le suivant :

int ferror ( FICHIER * flux );

Si le fichier est dû àUne erreur d'E/S s'est produiteLorsque la lecture est terminée, une valeur non nulle est renvoyée ; dans les autres cas, 0 est renvoyé.

Nous essayons ensuite d'écrire un morceau de code pour juger de la fin de la lecture du fichier :

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int c = 0;
  5. FILE* fp = fopen("test.txt", "r");
  6. if (fp == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
  12. {
  13. putchar(c);
  14. }
  15. //判断读取结束的原因
  16. if (ferror(fp))
  17. puts("I/O错误n");
  18. else if (feof(fp))
  19. puts("文件读取结束n");
  20. fclose(fp);
  21. fp = NULL;
  22. return 0;
  23. }

Résumer

Aujourd'hui, nous avons découvert les opérations sur les fichiers, comment ouvrir et fermer des fichiers, écrire des données ou lire des données à partir de fichiers, les fonctions permettant d'ajuster les pointeurs de fichiers et de déterminer la fin de la lecture des fichiers. Si vous pensez que ce que le blogueur a dit est bon, laissez un petit j'aime et merci pour votre soutien❤❤❤