Supprimer une partie d’un fichier

Problème

Vous voulez supprimer un enregistrement ou toute donnée dans un fichier.

Solution

À partir de l’endroit où vous souhaitez supprimer des données, recopiez la suite des données qui doivent rester dans le fichier. Une fois arrivé à la fin de la copie, réduisez la taille du fichier avec truncate().

Discussion

À l’inverse de l’insertion de données qui nécessite une recopie des données en partant de la fin, la suppression de données est plus simple car elle ressemble fortement à la copie de fichier, excepté que tout se passe dans le même fichier. La seule particularité se trouve dans la réduction de la taille de fichier avec truncate(). Voici un exemple :


int 
file_remove (const char *file_name, int pos, int len) 
{ 
  FILE *fd; 
  char buffer[1024]; 
  int read_pos, write_pos; 
  int file_length; 
  int erreur = 0; 
 
  if (NULL == (fd = fopen (file_name, "r+"))) 
    return (-1); 
 
/* Initialisation des pointeurs de position */ 
  fseek (fd, 0, SEEK_END); 
  file_length = ftell (fd) - len; 
  read_pos = pos + len; 
  write_pos = pos; 
 
/* Déplacement des données */ 
  while ((0 == erreur) && !feof (fd)) 
    { 
      int l; 
      fseek (fd, read_pos, SEEK_SET); 
      if ((NULL == fgets (buffer, 1024, fd)) && (!feof (fd))) 
        { 
          erreur = -1; 
          break; ...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Remplacer des données dans un fichier
Suivant
Calculer combien de lignes ou de caractères contient un fichier