Convertir FILETIME en time_t

Résolu
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 13 août 2007 à 10:46
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 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

 
A voir également:

30 réponses

LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
13 août 2007 à 17:35
ftLimitTime.dwHighDateTime=ftLimitTime.dwHighDateTime-6018;
donne : 29869629

et
IpFindFileData.ftCreationTime.dwHighDateTime
donne: 29875640

 
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 août 2007 à 17:42
Bon excuse moi d'insister mais t'es sûr que le fichier est vieux d'un mois? parce que si on convertit en SYSTEMTIME il dit qu'il date du 1er aout a peu pres.
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
13 août 2007 à 17:42
et pourtant dans mon repertoire j'ai 3 fichiers deux créés vendredi
et un créé il y a 3 mois que je viens de copier coller dedans ...

 
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 août 2007 à 17:43
mouais... est-ce-que le répertoire s'appelle comme le fichier testé par hasard?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 août 2007 à 17:45
Et tant qu'à faire si tu peux mettre le code avec FindFirstFile....
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
13 août 2007 à 17:47
ben ecoute le repertoire s'appelle trace com/
et la je viens de tester avec un fichier texte créé en 2004 qd mm et pareil ca ne marche pas....

code complet:
void PurgeTrace()
{
    HANDLE hdlfff;
    SYSTEMTIME SystemTime;
    bool erase = false;
    FILETIME ft;
    time_t   diff_en_secondes;
    __int64 t1,t2;

    //On va lister tout les programmes et repertoires du disque C:\
    //Pour lister juste les .txt par exemple mettre: c:\\*.txt
    //Ou sinon tout les fichier qui ont comme nom file  c:\\file.*

    LPCTSTR dir = "C:\\RTOP\\INSTAL\\trace com\\*.txt";
    //structure nécéssaire pour FindFirstFile() et FindNextFile()
    WIN32_FIND_DATA IpFindFileData;

    //la on initialise la variable hdlfff a la fonction FindFirstFile
    hdlfff = FindFirstFile(dir,&IpFindFileData);

    //premier fichier qu'il faut afficher avant la fonction FindNextFile qui ne
    //comprend pas le 1er fichier
    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;
    }       
    //Tant que le prochain fichier n'est pas égale a 0
    while (FindNextFile(hdlfff,&IpFindFileData))
    {
        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(&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;
        }
    }
    //A la fin du programme  fermeture le HANDLE
    FindClose(hdlfff);
}

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
13 août 2007 à 17:54
j'ai 4fichiers maintenant 2 nouveaux et deux vieux ....
alors a moins que le copier coller n'est une influence je n'y comprends rien ....

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
14 août 2007 à 09:48
re,

je comprends pas je viens d'essayer le code de SAkingdom et il ne se passe toujours rien mes fichiers ne sont pas éffacés!

désolé ...

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
14 août 2007 à 09:58
Bon a priori j'avais raison en faisant un copier coller de mes vieux fichiers ca devait changer la date de création et du coup forcément pour lui ca faisait moins d'un mois , a priori ca marche avec le code de SAkingdom
pour en etre sur j'ai juste changer le dir vers un repertoire ancien et c'est bon
PS: 30jours 2592000 30*24*3600

merci a  tous pour cette prise de tete collective ;-)

 
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 août 2007 à 14:49
Je te conseille fortement d'utiliser la méthode de BruNews. On évitera ainsi de faire appel à __allshl et __alldiv.

#define MONTH 25920000000000

int __cdecl main (void)
{
  WIN32_FIND_DATA fd;
  HANDLE hFind = FindFirstFile("C:\\jeux\\*", &fd);
  ULARGE_INTEGER systime;

  GetSystemTimeAsFileTime((FILETIME*)&systime);

  do {
    ULARGE_INTEGER filetime;

    if((fd.cFileName[0] == '.' && !fd.cFileName[1]) ||
        (fd.cFileName[0] == '.' && fd.cFileName[1] == '.' && !fd.cFileName[2])) continue;

    filetime.LowPart = fd.ftCreationTime.dwLowDateTime;
    filetime.HighPart = fd.ftCreationTime.dwHighDateTime;

    if((systime.QuadPart - filetime.QuadPart) >= (__int64)MONTH) {
      printf("%s\n", fd.cFileName);
    }
  } while(FindNextFile(hFind, &fd));

  CloseHandle(hFind);

  return 0;
}

C++ (@++)<!--
0
Rejoignez-nous