IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

récupérer date & heure de modification fichier et répert [FAQ]


Sujet :

C++Builder

  1. #1
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut récupérer date & heure de modification fichier et répert
    bponjour,

    je cherche à récupérer la date et l'heure de modification d'un fichier et aussi celles d'un répertoire. Quel est le nom de la fonction appropriée ?

    (je crois me souvenir que cette question a déjà été posée, mais l'outil de recherche me donne soit énormément trop de réponses, soit aucune... donc désolé pour la repose)

  2. #2
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 67
    Points : 79
    Points
    79
    Par défaut
    tu as les fonctions :
    extern PACKAGE int __fastcall FileAge(const AnsiString FileName);

    extern PACKAGE int __fastcall FileGetDate(int Handle);

  3. #3
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 042
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 042
    Points : 8 252
    Points
    8 252
    Par défaut
    Tu as la fonction de l'API Windows GetFileTime
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Tu peux aussi récupérer cette information dans la structure WIN32_FIND_DATA utilisée avec FindFirstFile par exemple.
    @+
    Frédéric

  5. #5
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    Meric pour vos réponses

    Ca m'arrangerait que cette fonction renvoit un TDateTime, ou que je puisse créer un TDateTime à partir de la valeur retournée. Est-ce le cas pour GetFileTime ou FileGetDate ?

  6. #6
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 67
    Points : 79
    Points
    79
    Par défaut
    BOOL GetFileTime(

    HANDLE hFile, // identifies the file
    LPFILETIME lpCreationTime, // address of creation time
    LPFILETIME lpLastAccessTime, // address of last access time
    LPFILETIME lpLastWriteTime // address of last write time
    );
    sinon tu as..
    extern PACKAGE System::TDateTime __fastcall FileDateToDateTime(int FileDate);

    Description

    FileDateToDateTime convertit une valeur date/heure au format DOS en objet TDateTime, qui est la représentation de valeurs date et heure utilisées par la VCL.

    Utilisez par exemple FileDateToDateTime pour convertir l'âge du fichier renvoyé par FileGetDate ou par FileAge en une valeur pouvant être utilisée avec d'autres routines et propriétés de la VCL. Vous pouvez aussi utiliser FileDateToDateTime pour convertir le champ Heure de la structure TSearchRec utilisée par les fonctions FindFirst et FindNext.

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Je ne sais pas pour vous mais chez moi FileDateToDateTime me renvoie toujours une erreur : "argument incorrect pour l'encodage de date".
    Et pourtant, je lui envoie bien un int en argument.

    ???

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Apparemment ça a l'air de fonctionner chez vous. Pour ceux qui, comme moi, ont une erreur à l'utilisation de FileDateToDateTime, j'ai adapté une partie de l'article http://community.borland.com/article...,26051,00.html pour convertir une date au format FILETIME vers le format AnsiString :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      WIN32_FIND_DATA* lpFindFileData = new WIN32_FIND_DATA;
      HANDLE hFile = ::FindFirstFile("C:\\Autoexec.bat", lpFindFileData);
     
      if (hFile != INVALID_HANDLE_VALUE)
      {
        FILETIME fileTime1 = lpFindFileData->ftLastWriteTime;
        SYSTEMTIME systemTimeRESULT;
     
     
        bool result = ::FileTimeToSystemTime( &fileTime1, &systemTimeRESULT);
     
        AnsiString ansFileDate = AnsiString(systemTimeRESULT.wDay);
        ansFileDate += AnsiString("/");
        ansFileDate += AnsiString(systemTimeRESULT.wMonth);
        ansFileDate += AnsiString("/");
        ansFileDate += AnsiString(systemTimeRESULT.wYear);
        ansFileDate += AnsiString(" ");
        ansFileDate += AnsiString(systemTimeRESULT.wHour);
        ansFileDate += AnsiString(":");
        ansFileDate += AnsiString(systemTimeRESULT.wMinute);
        ansFileDate += AnsiString(":");
        ansFileDate += AnsiString(systemTimeRESULT.wSecond);
        ShowMessage(ansFileDate);
      }
      delete lpFindFileData;
    }
    Bien sûr, il serait mieux de faire une fonction ad hoc.


    @+

    Frédéric

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Salut
    Quelqu'un peut-il me dire s'il a eu le même problème que moi avec FileDateToDateTime() ?
    Sinon, j'aimerais tout de même essayer de le régler.

    Merci

  10. #10
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    Chez moi ceci marche :

    ShowMessage(FileDateToDateTime(FileAge("c:\\autoexec.bat")));

    mais lorsqu'il s'agit d'un répertoire ca marche tout de suite bcp moins bien

    ShowMessage(FileDateToDateTime(FileAge("c:\\windows\\")));

    ==> erreur lors de l'encodage de la date.

    mais bon avec un fichier je crois que je vais m'en sortir.

    Merci à tous !!

  11. #11
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    Je recherche dans les fichiers d'une base de données quel est la date la plus récente, pour savoir de quand date la base de données...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int date;
    TSearchRec Infos_fichier;
     
    date=0;
    if (!FindFirst("entree\\*.*", faAnyFile, Infos_fichier))
    do
            if(FileAge("entree\\"+Infos_fichier.Name)>date)
                    date=FileAge("entree\\"+Infos_fichier.Name);
    while(!FindNext(Infos_fichier));
    FindClose(Infos_fichier);
    Form1->BddMaj->Text=FileDateToDateTime(date);
    Ceci fonctionne très bien, mais c'est assez long, car il parcourt tous les fichiers (plus de 2000)... Il n'y a pas moyen de trier en fonction de la date et de ne lire que la date du 1er ?
    Merci beaucoup !

  12. #12
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    J'ai trouvé un truc un peu + rapide..., j'ai remplacé les FileDate() par Infos_Fichier.Time ce qui, il est vrai, est un peu + logique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int date;
    TSearchRec Infos_fichier;
     
    date=0;
    if (!FindFirst("entree\\*.*", faAnyFile, Infos_fichier))
    do
            if(Infos_fichier.Time>date)
                    date=Infos_fichier.Time;
    while(!FindNext(Infos_fichier));
    FindClose(Infos_fichier);
    Form1->BddMaj->Text=FileDateToDateTime(date);
    Mon code est ainsi accéléré, mais si vous savez comment trier les fichiers par date et ne récupérer que le premier... merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer date et heure de SYSDATE séparément
    Par susu39 dans le forum PL/SQL
    Réponses: 10
    Dernier message: 07/08/2008, 15h06
  2. [Upload] Récupérer date de création d'un fichier uploadé
    Par jeromesteffe dans le forum Langage
    Réponses: 5
    Dernier message: 06/04/2008, 19h08
  3. récupérer date et heure d'une requête
    Par taffMan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/02/2007, 13h55
  4. Réponses: 7
    Dernier message: 14/06/2006, 14h46
  5. [Indy TIdFtp] Date et Heure d'un fichier
    Par portu dans le forum Delphi
    Réponses: 2
    Dernier message: 06/06/2006, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo