Bonjour !
Je suis en train d’essayer de faire une fonction qui prend en paramètre un dossier de départ, un statut (0 ou 1, qui correspond à un moins de … ou à un plus de …) et une valeur. Elle doit ensuite parcourir tous les fichiers du dossier de départ et de tous ses sous-dossiers en affichant ceux qui ont une date de dernier accès >= ou <= (selon le statut) à la valeur. J’ai ce code pour le moment :
void rec_date(char *starting_point, int statut, int valeur) { // dossier +/rien valeur m/h/j
/* Affiche récursivement tous les fichiers dont la dernière modification respecte la période */
// Gestion ouverture fichier/dossier
DIR *dp ;
struct dirent *current ;
struct stat s ;
dp = opendir(starting_point) ;
if (dp == NULL) {
perror("opendir") ;
exit(1) ;
}
// Parcours
while (current = readdir(dp)) {
if (strcmp(current->d_name, ".") == 0 || strcmp(current->d_name, "..") == 0)
continue ; // Pour ne pas reparcourir tout le système de fichier
if (current->d_type == DT_DIR) { // Sous-dossier
// Actualisation chemin
char chemin[BUFFER_CHEMIN] ;
snprintf(chemin, sizeof(chemin), "%s/%s", starting_point, current->d_name) ;
// Parcours récursif
rec_date(chemin, statut, valeur) ;
} else { // Fichier
// Temps actuel = time(NULL)
stat(current->d_name, &s) ;
printf("%s %d\n", current->d_name, s.st_mtime) ;
if ((statut == 0 && (time(NULL) - s.st_mtime) <= valeur) || (statut == 1 && (time(NULL) - s.st_mtime) >= valeur))
printf("%s/%s\n", starting_point, current->d_name) ;
}
}
// Fermeture du dossier
closedir(dp) ;
}
Il fonctionne parfaitement pour les différentes dates dans le répertoire courant par contre, avec le printf("%s %d\n", current->d_name, s.st_mtime) ; de débugage, je me rends compte que la date s.st_mtime est identique pour tous les fichiers dans les sous-dossiers (et je ne sais pas quelle valeur la date prend, parfois c’est 0 pour tous parfois autre chose) donc l’affichage devient faux… Comment pourrais-je faire pour régler ce problème ? (et avoir un comportement quasiment identique à celui de ls -lRu)
Merci d’avance pour votre réponse !