Principaux conseils pour la gestion des fichiers en C - Évitez les pièges potentiels!

Principaux conseils pour la gestion des fichiers en C – Évitez les pièges potentiels!

Le but de cet article est de couvrir, à partir d’un niveau élevé, les différents aspects de la gestion des fichiers en C dont les programmeurs doivent être conscients. Nous examinerons:

  • types de fichiers;
  • comment ouvrir et fermer des fichiers;
  • comment lire et écrire dans des fichiers;
  • moyens de vérifier la taille et de tester la fin du fichier.

En cours de route, nous signalerons les éventuels écueils et les bonnes pratiques de programmation.

Types de gestion de fichiers en C

Il existe deux principaux types de fichiers que les programmeurs doivent savoir gérer:

  • séquentiel – un octet (ou bloc d’octets) à la fois;
  • accès aléatoire – accessible en utilisant une sorte d’index, sans ordre particulier.

Un fichier peut en fait être divisé en deux parties – un index à accès séquentiel (liste des enregistrements) et une partie à accès aléatoire (les données d’enregistrement) qui est conçue pour fournir un accès plus rapide que la simple lecture et la suppression des enregistrements lorsque vous essayez de trouver l’élément demandé.

Découvrir :  Comment puis-je effacer définitivement les fichiers supprimés ?

La plupart des fichiers rencontrés par les programmeurs ont tendance à être séquentiels. Ils peuvent avoir l’un des deux formats suivants:

  • texte – texte lisible, éventuellement interprété par le système d’exploitation, c’est-à-dire ASCII ou EBCDIC;
  • binaire – données pures sans représentation, c.-à-d. valeurs d’octets (numériques).

Chacun de ces types de fichiers est accessible de manière séquentielle ou en utilisant un accès aléatoire, et le type de fichier est spécifié au moment de son ouverture.

Ouverture et fermeture de fichiers

Un fichier est ouvert à l’aide de la fonction fopen , et s’il n’existe pas, peut être créé avec la fonction fopen définie pour écrire dans le fichier. Pour éviter d’écraser un fichier existant, il est nécessaire d’essayer de l’ouvrir en lecture seule, et si ce n’est pas le cas, de l’ouvrir en tant que fichier inscriptible.

Attention: si un fichier existant est ouvert en écriture, il sera tronqué; pour ajouter à un fichier, l’indicateur d’ajout peut être utilisé à la place.

Découvrir :  Comment se protéger du spam ?

Toutes les variantes de fopen renvoient un pointeur de fichier (défini comme FILE *) qui peut être testé par rapport à NULL, avec une valeur NULL indiquant que le fichier n’existe pas.

Ce pointeur de fichier est nécessaire pour fermer ultérieurement le fichier.

Déterminer la taille du fichier

Pour connaître la taille, sans déplacer le pointeur de fichier, il faut:

  • stocker la position actuelle du fichier;
  • avance rapide jusqu’à la fin du fichier;
  • notez la position;
  • revenir à la position précédente dans le fichier.

Ceci est illustré dans l’article Écriture d’une fonction de taille de fichier . Notez que pour savoir si la fin du fichier a été atteinte, la valeur de retour de la fonction fread peut être testée par rapport à la constante EOF.

Lire et écrire à partir de fichiers en C

Les données peuvent être lues à partir du fichier octet par octet à l’aide de la fonction getc , qui renvoie une valeur de caractère (interprétée). La fonction compagnon putc écrit un caractère de texte dans le fichier.

Découvrir :  Qu'est ce qu'un test dans le cloud ?

Données formatées peuvent également être traitées en utilisant fprintf et fscanf , qui fonctionnent de la même manière que les fonctions STDIO.H printf et scanf . Ces fonctions ne sont utilisables qu’avec un fichier texte.

Les fichiers binaires sont traités à l’aide de fread et fwrite . Ces fonctions opèrent sur la mémoire qui a été allouée à l’aide de malloc et converties en un type de données utilisable.

Avant d’utiliser l’une de ces fonctions, un pointeur de fichier valide doit avoir été obtenu, sinon les résultats ne sont pas définis, se terminant parfois par un plantage.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.