Parcours de fichier, structure et liste chaînée
Bonsoir,
Je suis entrain de faire un petit programme C qui permet de liste le contenu d'un répertoire.
Je souhaite parcourir le-dit répertoire, et stocker les informations dans une structure qui va bien, puis parcourir cette structure pour afficher les informations.
J'ai donc une structure :
Code:
1 2 3 4 5 6
| typedef struct liste_fichier
{
struct dirent* fichier;
struct liste_fichier* suivant;
}sFichier; |
La fonction qui remplis ma structure avec les informations est la suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| sFichier* parcourir(char* repertoire)
{
DIR *rep;
if((rep = opendir(repertoire))==NULL)
{
fprintf(stderr,"Impossible d'ouvrir le dossier %s\n",repertoire);
exit(2);
}
sFichier* listeFichier = NULL;
sFichier* nouveau, *courant;
struct dirent *lecture;
struct stat st;
while ((lecture = readdir (rep)))
{
stat (lecture->d_name, &st);
time_t t = st.st_mtime;
struct tm tm = *localtime (&t);
char s[32];
strftime (s, sizeof s, "%d/%m/%Y %H:%M:%S", &tm);
fprintf(stdout,"%-14s %s\n", lecture->d_name, s);
if(listeFichier==NULL)
{
nouveau=(sFichier*) malloc (sizeof(sFichier));
nouveau->fichier = lecture;
listeFichier=nouveau;
courant=listeFichier;
}
else
{
nouveau=(sFichier*) malloc (sizeof(sFichier));
nouveau->fichier = lecture;
courant->suivant=nouveau;
courant=courant->suivant;
}
}
courant->suivant=NULL;
closedir(rep);
rep = NULL;
return listeFichier;
} |
Et enfin, la fonction d'affichage du contenu est la suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| void affichage(sFichier* listeFichier)
{
sFichier* courant = listeFichier;
struct stat st;
while(courant!=NULL)
{
stat (courant->fichier->d_name, &st);
time_t t = st.st_mtime;
struct tm tm = *localtime (&t);
char s[32];
strftime (s, sizeof s, "%d/%m/%Y %H:%M:%S", &tm);
fprintf(stdout,"%-14s %s\n", courant->fichier->d_name, s);
courant=courant->suivant;
}
} |
Mon problème est le suivant : les deux lignes en rouge n'affichent pas la même chose, et je ne comprend pas pourquoi...
J'ai loupé quelque chose ? (ou devrais-je dire, qu'ais-je loupé, puisque j'ai assuremment loupé quelque chose...)
D'avance merci à ceux qui pourront m'aider:D