Bonjour à toutes et à tous.
J'ai un petit (gros) problème au sujet des pointeurs et des fonctions.
Voila en gros à quoi ressemble mon code.
Mon souci là-dessus vient de ma variable de sortie psCheminFichier. Je ne sais pas comment faire pour bien la récupérer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <stdio.h> #include <dirent.h> #include <sys/stat.h> #include <string.h> int getInfoFile(char *psNomRep, char *psNomFichier, char *psCheminFichier, int *piDateFichier); int getInfoFile(char *psNomRep, char *psNomFichier, char *psCheminFichier, int *piDateFichier) { struct stat s; psCheminFichier = (char *) malloc(strlen(psNomRep) + strlen(psNomFichier) + 1); if(psCheminFichier == NULL) { printf("ERR : Plus assez de mémoire dispo..."); exit(1); } strcpy(psCheminFichier, psNomRep); strcat(psCheminFichier, psNomFichier); lstat(psCheminFichier, &s); *piDateFichier = s.st_mtime; }
J'ai effectivement compris que pour récupérer une variable en sortie, il fallait en faire un pointeur et attribuer à sa valeur un certain contenu à l'intérieur même de la fonction. Puis, lorsqu'on appelle la fonction, il faut placer dans le bon paramètre l'adresse d'une variable. Mais là, avec strcpy, je ne sais que faire...
Dans mon main(), j'appelle cette fonction en plusieurs occasions.
Ma fonction main() va me servir à ramener le fichier avec la date de modification la plus basse pour pouvoir ensuite faire un traitement sur ce fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 int main() { struct dirent *pDp; DIR *pRep_id; int iDateFichier = 0; int iDateFichierCourant = 0; char sCheminFichier; char sCheminFichierCourant; char *psNomRep = "/MonChemin/"; int i=0; pRep_id = opendir(psNomRep); for(pDp = readdir(pRep_id); pDp != NULL; pDp = readdir(pRep_id)) { if(strcmp(pDp->d_name, ".") != 0 && strcmp(pDp->d_name, "..") != 0) { if (i == 0) { getInfoFile(psNomRep, pDp->d_name, &sCheminFichier, &iDateFichier); i++; } else { getInfoFile(psNomRep, pDp->d_name, &sCheminFichierCourant, &iDateFichierCourant); if(iDateFichierCourant < iDateFichier) { iDateFichier = iDateFichierCourant; sCheminFichier =sCheminFichierCourant; } } } } closedir(pRep_id); printf("\n-----------\nLe plus ancien fichier est %s.\n-----------\n", sCheminFichier); return 0; }
Je m'excuse d'avance pour la maladresse de mon code.
Bahan
Partager