LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
13 août 2007 à 10:46
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
14 août 2007 à 14:49
Salut,
Voila mon probleme je recupere la date de cration d'un fichier via FindFirstFile(dir,&IpFindFileData);
FILETIME tim = IpFindFileData.ftCreationTime;
et j'aimerais faire une comparaison avec le temps courant et si le fichier est plus vieux d'un mois je l'efface...
habituellement j'utilise pour ce genre de chose la fonction difftime
mais elel prend un argument 2 time_t
alors voila je cherche a convertir le filetime en time_t afin de pouvoir faire la soustraction entre les deux temps ....
ps : je ne suis aps contre d'autres idées si il y en a ...
Merci
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 13 août 2007 à 15:06
D'accord mais j'entendais comparer avec une date pré-calculée d'un mois avant:
FILETIME ftLimitTime;
GetSystemTimeAsFileTime(&ftLimitTime);
ftLimitTime.dwHighDateTime=ftLimitTime.dwHighDateTime-6018; // précis à une minute a peu près j'ai compté 30 jours/mois
if(CompareFileTime(&ftFromFile,&ftLimitTime)<0)
{
...// détruit le fichier
}
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 13 août 2007 à 12:09
Tu peux utiliser CompareFileTime() qui prend deux FILETIME en argument; pour le temps courant tu peux le récupérer en SYSTEMTIME avec GetSystemTime() puis le convertir en FILETIME avec SystemTimeToFileTime().
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 13 août 2007 à 13:14
a priori c'est bon ce que tu m'as dit mais ce n'est pas ce que j'attends car la fonction CompareFileTime() renvoit 1,0,-1
si c'est egal inf, ou sup mais on sait pas de combien supérieur...
moi dans mes conditions il faut que ca soit supérieur a l'equivalent d'un mois (en sec ou autre)
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 13 août 2007 à 13:55
Voici la petite bidouille que j'ai faite :
FILETIME tim = IpFindFileData.ftCreationTime;
FileTimeToSystemTime(&tim,&SystemTime);
time_t current_time;
time(¤t_time);
struct tm t;
localtime_s( &t, ¤t_time);
//ajustement pour le mois de janvier
if(t.tm_mon == 0)
t.tm_mon = 12;
//on rentre que pour le mois avant le mois courant
if(SystemTime.wMonth == t.tm_mon )//attention t.tm_mon (0-->11) et SystemTime.wMonth(1-->12)
{
if(SystemTime.wDay > t.tm_mday)
{
char dir_file[100] = "C:\";
strcat(dir_file,IpFindFileData.cFileName);
if( DeleteFile( dir_file ) != 0 )
erase =true;
}
}
else if (SystemTime.wMonth <= t.tm_mon -1)//pour les jours non éffacés a cause des mois en 30j ou 28
{
char dir_file[100] = "C:\";
strcat(dir_file,IpFindFileData.cFileName);
if( DeleteFile( dir_file ) != 0 )
erase =true;
}
a priori mes fichiers seront bien éffacés pas toujours au bon moment(pour les fichiers datant du 31 par ex) mais c'est pas bien grave...
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 13 août 2007 à 16:45
je reviens sur ce que je disais juju12: ca ne amrche pas j'ai récupérer un vieux fichier txt que j'ai mis dans mon repertoire
et il ne passe aps dans la condition du comparefiletime.....
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 13 août 2007 à 17:09
pour la solution de magma il me donne
pour t1 -->12831490780
et pour current_time -->1187017162
du coup c'est mort par contre pour ta solution je ne sais pas pourquoi mais il ne rentre jamais :
FILETIME ftLimitTime;
GetSystemTimeAsFileTime(&ftLimitTime);
ftLimitTime.dwHighDateTime=ftLimitTime.dwHighDateTime-6018; // précis à une minute a peu près pour 30 jours/mois
if(CompareFileTime(&IpFindFileData.ftCreationTime,&ftLimitTime)<0)
{
char dir_file[100] = "C:\\RTOP\\CORUS RAIL\\INSTAL\\trace com\";
strcat(dir_file,IpFindFileData.cFileName);
if( DeleteFile( dir_file ) != 0 )
erase =true;
}
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 13 août 2007 à 17:11
Tu veux bien vérifier que FindFirstFile trouve bien le fichier? Si ca rate ca retourne 0xFFFFFFFF, et tous les champs de la structure WIN32_FIND_DATA sont à 0xCCCCCCCC donc c'est normal que ca ne marche pas. Je l'ai testé après avoir vérifié que le fichier avait été trouvé et ca a marché.