[C] Parcourir une arborescence et voir les dates

Discussion dans 'Web, design' créé par *Serval, 4 Septembre 2006.

Statut de la discussion:
Fermée.
  1. Offline
    *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;
    }
    *Serval, 5 Septembre 2006
    #21
  2. Offline
    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;
    Tifox, 5 Septembre 2006
    #22
  3. Offline
    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...
    TITM4v3rick, 5 Septembre 2006
    #23
  4. Offline
    b00msTicK O=(*.*Q)
    alors Serval, t'as su répondre au vieux lobelle? =]
    b00msTicK, 6 Septembre 2006
    #24
Statut de la discussion:
Fermée.