a) Ajoute à la fin du fichier
L'ancien fichier est entièrement copié dans le nouveau fichier, suivi du nouvel enregistrement.
L'ancien fichier est copié derrière le nouvel enregistrement qui est écrit en premier lieu.
Le nouveau fichier est créé en trois étapes:
- copier les enregistrements de l'ancien fichier qui précèdent le nouvel enregistrement,
- écrire le nouvel enregistrement,
- copier le reste des enregistrements de l'ancien fichier.
Solution en C
#include <stdio.h> #include <string.h> main() { /* Déclarations : */ /* Noms des fichiers et pointeurs de référence */ char ANCIEN[30], NOUVEAU[30]; FILE *INFILE, *OUTFILE; /* Autres variables */ char NOM_PERS[30], NOM_AJOUT[30]; int TROUVE; /* Ouverture de l'ancien fichier en lecture */ do { printf("Nom de l'ancien fichier : "); scanf("%s", ANCIEN); INFILE = fopen(ANCIEN, "r"); if (!INFILE) printf("\aERREUR: Impossible d'ouvrir " "le fichier: %s.\n", ANCIEN); } while (!INFILE); /* Ouverture du nouveau fichier en écriture */ do { printf("Nom du nouveau fichier : "); scanf("%s", NOUVEAU); OUTFILE = fopen(NOUVEAU, "w"); if (!OUTFILE) printf("\aERREUR: Impossible d'ouvrir " "le fichier: %s.\n", NOUVEAU); } while (!OUTFILE); /* Saisie de l'enregistrement à insérer */ printf("Enregistrement à insérer : "); scanf("%s",NOM_AJOUT); /* Traitement */ TROUVE = 0; /* Copie des enregistrements dont le nom */ /* précéde lexicogr. celui à insérer.*/ while (!feof(INFILE) && !TROUVE) { fscanf(INFILE, "%s\n", NOM_PERS); if (strcmp(NOM_PERS, NOM_AJOUT) > 0) TROUVE = 1; else fprintf(OUTFILE, "%s\n", NOM_PERS); } /* Ecriture du nouvel enregistrement, */ fprintf(OUTFILE, "%s\n", NOM_AJOUT); /* suivi du dernier enregistrement lu. */ if (TROUVE) fprintf(OUTFILE, "%s\n", NOM_PERS); /* Copie du reste des enregistrements */ while (!feof(INFILE)) { fscanf(INFILE, "%s\n", NOM_PERS); fprintf(OUTFILE, "%s\n", NOM_PERS); } /* Fermeture des fichiers */ fclose(OUTFILE); fclose(INFILE); return 0; }