[C] Parcourir une arborescence et voir les dates

Statut
N'est pas ouverte pour d'autres réponses.
1er
OP
*Serval

*Serval

Elite
toujours la question niveau des "programmes"


sinon, le timestamp affiché est -1995840000 quand je passe en second argu 060904 (donc hier)...
Du coup tous les fichiers sont affichés. Vous voyez mon erreur (surement dans la main)? (code en fin de post)


Encore merci pour ton aide Tifox !



Code:
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
#include <stdio.h>
#include <time.h>
#include <string.h>



void myscandir(char *source,time_t *date)
{
	// Ouverture dossier
	DIR *folder = opendir(source);
	if (folder != NULL)
	{
		struct dirent *file;
		// Listing des fichiers
		while (file = readdir(folder))
		{

			if( strncmp(file->d_name, ".", 1) != 0 ) // passer les "fichiers" . et ..
			{
		
				// Récupérer les information sur un fichier
				struct stat fileInfo;
				char filePath[(strlen(source) + strlen(file->d_name) + 1)];
				strcpy(filePath, source);
				strcpy(filePath + strlen(source), "/");
				strcpy(filePath + strlen(source) + 1, file->d_name);
				stat(filePath, &fileInfo);

				if( S_ISDIR (fileInfo.st_mode)) // si c'est un dir ...
				{
					myscandir(filePath, date); // ...on rappelle la fonction récursivement
				}
				else
				{
					if(fileInfo.st_mtime > *date) // si la date de modif du fichier est plus récente que la date entrée
					{
						printf("%s \n", filePath);
						printf("%d \n", *date); // TEST A DELETER
					}
				}
			}
		}
	}
}


int main(int argv, char** argc)
{
	if(argv != 3) // Il faut 2 arguments
	{
		return -1;
	}
	struct tm date;
	time_t timedate;
	char tmp[2];
	date.tm_sec = 0;
	date.tm_min = 0;
	date.tm_hour = 0;
	strncpy(tmp, argc[2], 2);
	date.tm_year = atoi(tmp);
	strncpy(tmp, argc[2]+2, 2);
	date.tm_mon = atoi(tmp);
	strncpy(tmp, argc[2]+4, 2);
	date.tm_mday = atoi(tmp);
	timedate = mktime ( & date ); // timestamp de la date passée en second arg
	myscandir(argc[1],&timedate); // on appelle myscandir
	return 0;
}
 

Tifox

ou pas
Je ne sais pas trop. si mes souvenirs sont bon, un time_t est un simple entier. Essaye de le caster en unsigned int peut-être :
Code:
unsigned int timedate_tmp = (unsigned int) timedate;
 
Quand je vois ce forum et ce genre de thread, je suis bien content pour vous d'avoir pleurer un jour pour avoir cette section. :-D
J'ai de mauvais souvenirs de ce type d'exercices sous Linux...
 

b00msTicK

O=(*.*Q)
alors Serval, t'as su répondre au vieux lobelle? =]
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut