begin process at 2008 07 05 07:01:23
1 205 054 membres
40 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RÉCUPÉRATION DES DATES D'UN FICHIER EN CLAIR


Description

Récupére la date de création, de modification et dernier acces d'un fichier
et converti les résultats en chaines de caractères complétement exploitable.
ce programme est déja autonome.
compilé et testé avec Borland c++ 5.5.

Source

  • #include <stdio>
  • using namespace std;
  • #include <windows>
  • #include <iostream>
  • //-----------------------------------------------------------------------
  • // Auteur : UKR6900
  • // Date début : 16/06/2006
  • // Date dernière MAJ : 16/06/2006
  • // Description : Exemple récupération des dates d'un fichier en clair
  • //------------------------------------------------------------------------
  • //------------------------------------------------------------------------------
  • // FONCTION : myGetFileTime
  • // DESCRIPTION : Retrouve les differentes dates d'un fichier et
  • // converti les temps en chaine
  • // VALEUR RETOUR : TRUE si succe, FALSE si echec
  • // PARAMETRES : hFile - handle de fichier valide
  • // lpszCreate - Pointer vers un buffer pour recevoir une chaine date creation
  • // lpszAccess - Pointer vers un buffer pour recevoir une chaine date dern.acce
  • // lpszWrite - Pointer vers un buffer pour recevoir une chaine date dern.modif.
  • //HANDLE hFile
  • //-------------------------------------------------------------------------------
  • BOOL myGetFileTime(const char * NameFile, LPTSTR lpszCreate,LPTSTR lpszAccess,LPTSTR lpszWrite){
  • FILETIME ftCreate, ftAccess, ftWrite;
  • SYSTEMTIME stUTC, stCreateLocal,stAccessLocal,stWriteLocal;
  • //opuverture du handle de fichier si existe
  • HANDLE hFile = CreateFile(NameFile,0,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,
  • OPEN_EXISTING,0,NULL);
  • if (hFile != INVALID_HANDLE_VALUE){
  • //Recupere les temps du fichier
  • if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
  • return FALSE;
  • else
  • CloseHandle(hFile);
  • //end if
  • }else
  • return FALSE;
  • //end if
  • //Converti le temp de creation en temp local
  • FileTimeToSystemTime(&ftCreate, &stUTC);
  • SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stCreateLocal);
  • //Converti le temp dern.acce en temp local.
  • FileTimeToSystemTime(&ftAccess, &stUTC);
  • SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stAccessLocal);
  • //Converti le temp dern.modif en temp local.
  • FileTimeToSystemTime(&ftWrite, &stUTC);
  • SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stWriteLocal);
  • //Construit les chaines pour montrer la date et le temp.
  • wsprintf(lpszCreate, TEXT("%02d/%02d/%d %02d:%02d"),
  • stCreateLocal.wMonth, stCreateLocal.wDay, stCreateLocal.wYear,
  • stCreateLocal.wHour, stCreateLocal.wMinute);
  • wsprintf(lpszAccess, TEXT("%02d/%02d/%d %02d:%02d"),
  • stAccessLocal.wMonth, stAccessLocal.wDay, stAccessLocal.wYear,
  • stAccessLocal.wHour, stAccessLocal.wMinute);
  • wsprintf(lpszWrite, TEXT("%02d/%02d/%d %02d:%02d"),
  • stWriteLocal.wMonth, stWriteLocal.wDay, stWriteLocal.wYear,
  • stWriteLocal.wHour, stWriteLocal.wMinute);
  • return TRUE;
  • }//end process
  • //------------------------------------------------------------------------------
  • // START PROGRAM TEST CLASS
  • //-------------------------------------------------------------------------------
  • void main(){
  • //allocation mémoire
  • char * strCreate = new char[20];
  • char * strLastAccess = new char[20];
  • char * strLastWrite = new char[20];
  • const char * NameF = "C:\\WINDOWS\\clock.avi";
  • //récupére les temps du fichier nomme
  • myGetFileTime(NameF,strCreate,strLastAccess,strLastWrite);
  • //Affiche les résultats
  • cout << "Cree le : " << strCreate << endl;
  • cout << "Modifie le : " << strLastWrite << endl;
  • cout << "Dernier acce le : " << strLastAccess << endl;
  • }
  • //------------------------------------------------------------------------------
  • // END PROGRAM TEST CLASS
  • //-------------------------------------------------------------------------------
  #include <stdio>
  using namespace std;
  #include <windows>
  #include <iostream>

//-----------------------------------------------------------------------
// Auteur            : UKR6900
// Date début        : 16/06/2006
// Date dernière MAJ : 16/06/2006
// Description       : Exemple récupération des dates d'un fichier en clair
//------------------------------------------------------------------------

//------------------------------------------------------------------------------
// FONCTION      : myGetFileTime
// DESCRIPTION   : Retrouve les differentes dates d'un fichier et 
//                 converti les temps en chaine
// VALEUR RETOUR : TRUE si succe, FALSE si echec
// PARAMETRES    : hFile      - handle de fichier valide
//                 lpszCreate - Pointer vers un buffer pour recevoir une chaine date creation
//                 lpszAccess - Pointer vers un buffer pour recevoir une chaine date dern.acce
//                 lpszWrite  - Pointer vers un buffer pour recevoir une chaine date dern.modif.
//HANDLE hFile
//-------------------------------------------------------------------------------
  BOOL myGetFileTime(const char * NameFile, LPTSTR lpszCreate,LPTSTR lpszAccess,LPTSTR lpszWrite){
    FILETIME ftCreate, ftAccess, ftWrite;
    SYSTEMTIME stUTC, stCreateLocal,stAccessLocal,stWriteLocal;

  //opuverture du handle de fichier si existe
    HANDLE hFile = CreateFile(NameFile,0,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,
                               OPEN_EXISTING,0,NULL);
    if (hFile != INVALID_HANDLE_VALUE){
    //Recupere les temps du fichier
      if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
         return FALSE;
       else
         CloseHandle(hFile);
      //end if
     }else 
        return FALSE;
    //end if

  //Converti le temp de creation en temp local
    FileTimeToSystemTime(&ftCreate, &stUTC);
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stCreateLocal);

  //Converti le temp dern.acce en temp local.
    FileTimeToSystemTime(&ftAccess, &stUTC);
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stAccessLocal);

  //Converti le temp dern.modif en temp local.
    FileTimeToSystemTime(&ftWrite, &stUTC);
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stWriteLocal);


  //Construit les chaines pour montrer la date et le temp.
    wsprintf(lpszCreate, TEXT("%02d/%02d/%d  %02d:%02d"),
             stCreateLocal.wMonth, stCreateLocal.wDay, stCreateLocal.wYear,
             stCreateLocal.wHour, stCreateLocal.wMinute);

    wsprintf(lpszAccess, TEXT("%02d/%02d/%d  %02d:%02d"),
             stAccessLocal.wMonth, stAccessLocal.wDay, stAccessLocal.wYear,
             stAccessLocal.wHour, stAccessLocal.wMinute);

    wsprintf(lpszWrite, TEXT("%02d/%02d/%d  %02d:%02d"),
             stWriteLocal.wMonth, stWriteLocal.wDay, stWriteLocal.wYear,
             stWriteLocal.wHour, stWriteLocal.wMinute);

    return TRUE;
  }//end process
//------------------------------------------------------------------------------
//                      START PROGRAM TEST CLASS
//-------------------------------------------------------------------------------
  void main(){

//allocation mémoire
  char * strCreate     = new char[20];
  char * strLastAccess = new char[20];
  char * strLastWrite  = new char[20];
  const char * NameF = "C:\\WINDOWS\\clock.avi";
//récupére les temps du fichier nomme
  myGetFileTime(NameF,strCreate,strLastAccess,strLastWrite);

//Affiche les résultats
  cout << "Cree le         : " << strCreate << endl;
  cout << "Modifie le      : " << strLastWrite << endl;
  cout << "Dernier acce le : " << strLastAccess << endl;

  }
//------------------------------------------------------------------------------
//                      END PROGRAM TEST CLASS
//-------------------------------------------------------------------------------

Conclusion

Basé sur les documentations MSDN de microsoft
Amélioré pour cet exemple.
  • signaler à un administrateur
    Commentaire de BruNews le 16/09/2006 16:59:36 administrateur CS

    if(hFile != INVALID_HANDLE_VALUE)
    {
      if(!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite)) return FALSE;
      else CloseHandle(hFile);
    }
    else return FALSE;

    Tu ne fermes pas hFile à tout coup, il faudrait pourtant.

    Rien de tel que la simplicité:
    if(hFile == INVALID_HANDLE_VALUE) return FALSE;
    BOOL bok = GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);
    CloseHandle(hFile);
    if(!bok) return FALSE;
    etc....

  • signaler à un administrateur
    Commentaire de Joky le 18/09/2006 15:43:28

    Tu alloues avec new alors que tu connais déjà la taille que tu souhaites allouée, donc d'une aucun intérêt et en plus, tu oublies de désallouer...
    Autant déclarer tes chaînes de caractère sur le tas, surtout pour si peu

  • signaler à un administrateur
    Commentaire de rosco91 le 30/05/2007 13:36:29

    j'ai essayé de compiler ton programme avec devC/C++ et il ne fonctionne pas. J'ai un petit problème avec le type "BOOL". J'aimerai savoir comment le déclarer. stp

    Merci d'avance..

  • signaler à un administrateur
    Commentaire de Renfield le 30/05/2007 13:46:51 administrateur CS

    pas de soucis, normallement, si tu inclus bien windows.h

    windows.h => windef.h =>
    typedef int                 BOOL;

  • signaler à un administrateur
    Commentaire de rosco91 le 30/05/2007 13:50:13

    Oui cela fonctionne!!! Merci. Mais il faut aussi changer #include<stdlib>
    en #include<stdlib.h>. Voila tout et merci encore une fois Renfield pour ton information.

  • signaler à un administrateur
    Commentaire de rosco91 le 30/05/2007 13:54:59

    Oh! j'allais oublié. Ce code permet-il de lire récupération de la date d'un fichier texte? Parce que c'est ce que j'aurais aimé pouvoir faire.
    Merci d'avance..

  • signaler à un administrateur
    Commentaire de BruNews le 30/05/2007 14:27:23 administrateur CS

    Il n'y a pas plus de fichier "texte" qu'autre chose.
    Un fichier est une série d'octets et rien de plus.

  • signaler à un administrateur
    Commentaire de Renfield le 30/05/2007 14:28:54 administrateur CS

    l'API est pas sectaire, et récupère l'info de tous types de fichiers...

  • signaler à un administrateur
    Commentaire de rosco91 le 30/05/2007 14:29:51

    OUI OUI excuse moi, mauvaise question posée!

Ajouter un commentaire

Pub



Appels d'offres

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS