Voilà un exemple de lecture à l'envers d'un fichier texte en passant par un tableau dans lequel on mémorise l'adresse de chaque ligne dans le fichier lors d'une première lecture du fichier. Puis, lors de la seconde lecture du fichier, on se positionne sur le début de chaque ligne pour la lire mais en commençant par la dernière ligne et en remontant vers la première ligne.
#include <stdio.h>
#include <time.h>
void main()
{
char nom_fichier[MAX_PATH];
char buffer[1000];
long adresse[10000];
int compteur;
FILE *pf;
// --- Saisir/ouvrir le fichier
while(true)
{
printf("\nVeuillez saisir un nom de fichier correct avec l'extension .txt !\n");
printf("\nNom du fichier : ");
scanf("%s",nom_fichier);
pf = fopen(nom_fichier,"r");
if (pf) break;
printf("\n*** ERREUR A L'OUVERTURE DU FICHIER ***\n");
}
// --- Remplir le tableau des adresses de début de ligne dans le fichier
compteur = 0;
adresse[compteur++] = 0; // 1ère ligne
while (fgets(buffer,sizeof(buffer),pf))
adresse[compteur++] = ftell(pf);
--compteur; // supprimer la dernière ligne = EOF
// --- Parcourir le fichier de la fin vers le début
printf("compteur = %d\n",compteur);
for (int i=compteur-1 ; i>=0 ; --i)
{
fseek(pf,adresse[i],SEEK_SET); // positionnement
fgets(buffer,sizeof(buffer),pf); // lecture
printf("%03d : %s",i,buffer); // visu
}
// --- Fermer le fichier
fclose(pf);
}
Jean-François