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

Langage Delphi Discussion :

récupération des dates d'un fichier


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut récupération des dates d'un fichier
    Salut

    J'ai besoin de récupérer la date de modification de fichiers afin de les comparer. J'utilise la fonction présentée dans la faq, mais j'obtiens des résulats aberrants du genre dernière modification en 1728 ! Et ces résultats ne sont même pas fixe. Pour un même fichier (modifié 10 min auparavant), la première interrogation me rend le jour et la date exacte, mais ni l'année ni l'heure correctes. Les interrogations suivantes (dans la meme exécution du programme) renvoient des valeurs totalement différentes et entièrement fausses !

    Ce bug dit-il quelque chose à quelqu'un ?

    Au passage, mon horloge système est bien réglée.

  2. #2
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    bonjour
    Peux-tu mettre en ligne le bout de code que tu utilise?
    Cordialement

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    J'utilise la fonction présentée dans la Faq, à savoir :

    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
    29
    30
    function TFSynchro.GetFileTimes(const FileName: string; var Created: TDateTime;
      var Accessed: TDateTime; var Modified: TDateTime): Boolean;
    var
      h: THandle;
      Info1, Info2, Info3: TFileTime;
      SysTimeStruct: SYSTEMTIME;
      TimeZoneInfo: TTimeZoneInformation;
      Bias: Double;
    begin
      Result := False;
      Bias   := 0;
      h      := FileOpen(FileName, fmOpenRead or fmShareDenyNone);
      if h > 0 then
      begin
        try
          if GetTimeZoneInformation(TimeZoneInfo) <> $FFFFFFFF then
            Bias := TimeZoneInfo.Bias / 1440; // 60x24
          GetFileTime(h, @Info1, @Info2, @Info3);
          if FileTimeToSystemTime(Info1, SysTimeStruct) then
            Created := SystemTimeToDateTime(SysTimeStruct) - Bias;
          if FileTimeToSystemTime(Info2, SysTimeStruct) then
            Accessed := SystemTimeToDateTime(SysTimeStruct) - Bias;
          if FileTimeToSystemTime(Info3, SysTimeStruct) then
            Modified := SystemTimeToDateTime(SysTimeStruct) - Bias;
          Result := True;
        finally
          FileClose(h);
        end;
      end;
    end;
    Et je l'utilise comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var dateCreate, dateAcces, dateModif  :TDateTime;
    ...
    if GetFileTimes(profil.dst+'\'+profil.fics[i],dateCreate, dateAcces, DateModif) then
              showmessage(FormatDateTime('"Fichier '+profil.fics[i]+' modifié le " dd/mm/yyyy" à "hh:ss', datemodif))
    profil.dst est le chemin du fichier et profil.fics[i] un élément d'une TStringList qui contient le nom du fichier avec son extension. Ces variables sont correctes à l'exécution.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Personne n'aurait un début d'idée du pourquoi ça veut pas marcher ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Tu n'es pas obligé d'ouvrir le fichier pour récupérer la date: GetFileAttributesEx fait cela très bien
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/openfile.asp

    Tu es sûr d'avoir bien utilisé le bon format de date ?

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Salut

    (ceci est valable dans Delphi 6, à vérifier dans les versions antérieures)
    Il existe une fonction dans SysUtils qui réalise ce calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function FileAge(const FileName: string): Integer;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function FileDateToDateTime(FileDate: Integer): TDateTime;
    pour se ramener à un TDateTime.

    cdlt

    e-ric

    Conseil à l'attention de la tablée : N'hésitez pas à potasser les sources de la VCL, il y a plein de bonnes choses toutes faites.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Merci bien, ça marche nickel comme ça ! Et d'ailleurs j'ai trouvé pourquoi la première solution ne marchait pas, yavait un bug dans l'attribution des chemins de fichiers. Mais si la solution avec FileAge n'ouvre pas le fichier et est donc meilleure en ressource et temps, je prends.

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

Discussions similaires

  1. récupération des données d'un fichier xml ?
    Par sarapis dans le forum Flex
    Réponses: 2
    Dernier message: 10/02/2009, 11h40
  2. Réponses: 5
    Dernier message: 03/04/2008, 15h28
  3. Réponses: 6
    Dernier message: 20/01/2008, 16h32
  4. Récupération des données d'un fichier .txt
    Par vincou dans le forum VB.NET
    Réponses: 3
    Dernier message: 24/07/2007, 10h55
  5. Récupération des éléments d'un fichier xml en flux retour
    Par opeo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/11/2005, 10h33

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