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

Contribuez Delphi Discussion :

Récupérer les dates d'un fichier avec décalage horaire


Sujet :

Contribuez Delphi

  1. #1
    ILP
    ILP est déconnecté
    Membre confirmé
    Avatar de ILP
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    mai 2002
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2002
    Messages : 257
    Points : 580
    Points
    580
    Par défaut Récupérer les dates d'un fichier avec décalage horaire
    Bonjour, voici une petite fonction permettant de retourner les dates d'un fichier en prenant en compte le décalage horaire et l'heure d'été.

    Le type retourné par la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Dates d'un fichier
    TDatesFichier = record
      DateCreation      : TDateTime;
      DateAcces         : TDateTime;    
      DateModification  : TDateTime;
    end;
    Et la fonction en elle même :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    // Retourne les dates d'un fichier
    function DatesFichier(NomFichier: String): TDatesFichier;
    var
      HandleFichier: THandle;
      DtCreation, DtAcces, DtModif: TFileTime;
      SysTimeStruct: SYSTEMTIME;
      TimeZoneInfo: TTimeZoneInformation;
      DecalageHoraire: Double;
    begin
      // Récupère le décalage horaire
      case GetTimeZoneInformation(TimeZoneInfo) of
        TIME_ZONE_ID_STANDARD:
          DecalageHoraire :=
            (TimeZoneInfo.Bias + TimeZoneInfo.StandardBias) / 1440;
        TIME_ZONE_ID_DAYLIGHT:
          DecalageHoraire :=
            (TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias) / 1440;
      end;
     
      // Récupère le handle du fichier
      HandleFichier := FileOpen(NomFichier, fmOpenRead or fmShareDenyNone);
      // Récupère les dates du fichier
      GetFileTime(HandleFichier, @DtCreation, @DtAcces, @DtModif);
     
      // Retourne les dates du fichier
      with Result do
      begin
        // Date de création
        if FileTimeToSystemTime(DtCreation, SysTimeStruct) then
          DateCreation := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          DateCreation := 0;
     
        // Date du dernier accès
        if FileTimeToSystemTime(DtAcces, SysTimeStruct) then
          DateAcces := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          DateAcces := 0;
     
        // Date de la dernière modification
        if FileTimeToSystemTime(DtModif, SysTimeStruct) then
          DateModification := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          DateModification := 0;
      end;
    end;

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 5 411
    Points : 8 076
    Points
    8 076
    Par défaut
    Merci pour ta participation
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mars 2006
    Messages : 569
    Points : 463
    Points
    463
    Par défaut
    Bonjour,

    je me permets de poursuivre ce post fermé en proposant une
    petite modification de cette fonction que je trouve plus agréable à utiliser de cette manière :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    function GetFileTimes(NomFichier: string; var Created: TDateTime;
      var Accessed: TDateTime; var Modified: TDateTime): boolean;
    var
      HandleFichier: THandle;
      DtCreation, DtAcces, DtModif: TFileTime;
      SysTimeStruct: SYSTEMTIME;
      TimeZoneInfo: TTimeZoneInformation;
      DecalageHoraire: Double;
    begin
      // Récupère le décalage horaire
      case GetTimeZoneInformation(TimeZoneInfo) of
        TIME_ZONE_ID_STANDARD:
          DecalageHoraire := (TimeZoneInfo.Bias + TimeZoneInfo.StandardBias) / 1440;
        TIME_ZONE_ID_DAYLIGHT:
          DecalageHoraire := (TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias) / 1440;
      end;
     
      // Récupère le handle du fichier
      HandleFichier := FileOpen(NomFichier, fmOpenRead or fmShareDenyNone);
     
      if HandleFichier > 0 then
      begin
      // Récupère les dates du fichier
        GetFileTime(HandleFichier, @DtCreation, @DtAcces, @DtModif);
     
      // Retourne les dates du fichier
    //    with Result do
    //    begin
        // Date de création
        if FileTimeToSystemTime(DtCreation, SysTimeStruct) then
          Created := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          Created := 0;
     
        // Date du dernier accès
        if FileTimeToSystemTime(DtAcces, SysTimeStruct) then
          Accessed := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          Accessed := 0;
     
        // Date de la dernière modification
        if FileTimeToSystemTime(DtModif, SysTimeStruct) then
          Modified := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          Modified := 0;
     
        Result := True;
    //    end;
      end;
    end;

  4. #4
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mars 2006
    Messages : 569
    Points : 463
    Points
    463
    Par défaut
    plus précis :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    function GetFileTimes(NomFichier: string; var Created: TDateTime;
      var Accessed: TDateTime; var Modified: TDateTime): boolean;
    var
      HandleFichier: THandle;
      DtCreation, DtAcces, DtModif: TFileTime;
      SysTimeStruct: SYSTEMTIME;
      TimeZoneInfo: TTimeZoneInformation;
      DecalageHoraire: Double;
    begin
      DecalageHoraire := 0;
      Result := false;
      // Récupère le décalage horaire
      case GetTimeZoneInformation(TimeZoneInfo) of
        TIME_ZONE_ID_STANDARD:
          DecalageHoraire := (TimeZoneInfo.Bias + TimeZoneInfo.StandardBias) / 1440;
        TIME_ZONE_ID_DAYLIGHT:
          DecalageHoraire := (TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias) / 1440;
      end;
      // Récupère le handle du fichier
      HandleFichier := FileOpen(NomFichier, fmOpenRead or fmShareDenyNone);
      if HandleFichier > 0 then
      begin
      // Récupère les dates du fichier
        GetFileTime(HandleFichier, @DtCreation, @DtAcces, @DtModif);
      // Retourne les dates du fichier
    //    with Result do
    //    begin
        // Date de création
        if FileTimeToSystemTime(DtCreation, SysTimeStruct) then
          Created := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          Created := 0;
        // Date du dernier accès
        if FileTimeToSystemTime(DtAcces, SysTimeStruct) then
          Accessed := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          Accessed := 0;
        // Date de la dernière modification
        if FileTimeToSystemTime(DtModif, SysTimeStruct) then
          Modified := SystemTimeToDateTime(SysTimeStruct) - DecalageHoraire
        else
          Modified := 0;
        Result := True;
    //    end;
      end;
    end;

Discussions similaires

  1. [D2010] Modifier les dates d'un fichier avec SetFileTime
    Par Lung dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 14/02/2012, 14h11
  2. Récupérer les dates dans un fichier XML
    Par Norore dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2011, 15h40
  3. Réponses: 3
    Dernier message: 14/03/2007, 15h30
  4. Récupérer les propriétés d'un fichier avec GtkFileChooser
    Par yodo21 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 26/10/2006, 17h30

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