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

API, COM et SDKs Delphi Discussion :

Récupérer date de création d'un répertoire


Sujet :

API, COM et SDKs Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut Récupérer date de création d'un répertoire
    Bonjour,

    J'utilise la fonction suivante pour recuperer le nombre de jours dont est agé un fichier.
    Aujourd'hui je voudrais passer un repartoire a la place d'un fichier (enfin les deux en fait).
    Apparemment cela ne marche pas ca me renvoi une valeur comme 14562 je crois.

    Comment puis-je faire pour pouvoir faire le meme traietement que cette fonction sur un repertoire?

    Merci d'avance.


    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
    //on commence a recuperer les didderentes dates systeme du fichier
      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;
     
        finally
          FileClose(h);
     
          Age := DaysBetween(Created, Now) + 1;

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Est ce que c'est possible au moins?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Je retente... help

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 676
    Points : 7 077
    Points
    7 077
    Par défaut
    Le TSearchRec peut te le donner.
    Voici un exemple de test (vite fait):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
       sr: TSearchRec;
    begin
        if FindFirst('D:\Projets Delphi\*.*', faAnyFile, sr) = 0 then
        begin
          repeat
            if (sr.Attr and faDirectory) = sr.Attr then
            begin
                Memo1.Lines.Add(sr.Name + ' - ' + DateTimeToStr(FileDateToDateTime(sr.Time)));
            end;
          until FindNext(sr) <> 0;
          FindClose(sr);
        end;
    end;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup ca marche impec


    Pour info voici la fonction dans laquelle je regarde si le repertoire est plus vieu qu'un nombre de jour passé en parametre et je le supprime le cas échéant (des fois que quelqu'un fasse une recherche et que ca puisse interesser)
    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
    52
     
    if DirectoryExists(Chemin) then
      Begin
        { le repertoire existe }
        { Recherche de la première entrée du répertoire }
        If FindFirst(Chemin+'*.*',faAnyFile,Info)=0 Then
        Begin
          Repeat
            If Not((Info.Attr And faDirectory)=0)
              Then
              Begin
                if (Extension = 'repertoire') Then
                  begin
                  DateTimeToStr(FileDateToDateTime(Info.Time));
                  compteur := compteur + Verification_date2(Chemin+Info.FindData.cFileName, Jours, Info.Time);
                  END;
              End
     
    etc etc
     
     
     
    function TForm1.Verification_Date2(const FileName, jours: string; creation : integer):integer;
    var
      Age, compteur : integer;
      suppr : boolean;
      fos: TSHFileOpStruct;
     
    Begin
      compteur := 0;
     
      Age := DaysBetween(FileDateToDateTime(creation), Now) + 1;
      //showmessage(DateTimeToStr(FileDateToDateTime(creation))+'  '+DateTimeToStr(Now)+'  '+inttostr(Age));
          If (Age > StrToInt(jours)) Then //le repertoire est plus agé que le nombre de jours fixé
          Begin
            ZeroMemory(@fos, SizeOf(fos));
            with fos do begin
              wFunc := FO_DELETE;
              fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
              pFrom := PChar(Filename + #0);
            end;
            if (ShFileOperation(fos) = 0) Then
            Begin
              compteur := 1;
              Log ('Supression du repertoire ' +Filename+ ' agé de '+InttoStr(Age)+' jours > '+jours+' jours.');
            End
            Else
              Log ('ERREUR : probleme de suppression du repertoire '+Filename+' agé de '+IntToStr(Age)+' jours > '+jours+' jours');
          end;
     
      result := compteur;
    End;

    Encore merci

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 51
    Points : 32
    Points
    32
    Par défaut Sujet non épuisé...
    Je relance ce sujet vieux de 12 ans…
    Car ayant rencontré la même problématique, je constate que la réponse apportée par Lung est incomplète.

    Effectivement le constat de Kara est juste, l’exemple de fonction pour retourner les dates de création, de dernier accès et de modification du fichier, qu’il a trouvée dans la FAQ, ne fonctionne pas sur les répertoires.
    La réponse de Lung avec TSearchRec ne répond pas vraiment à la demande. TsearchRec retourne uniquement la date de modification.
    Je cherche encore une solution pour la date de création du répertoire.
    (Pour mon application de renommage par lot, Renomme, dans le cas précis où l’utilisateur, après avoir transféré des répertoires avec du contenu, veut renommer ces répertoires avec la date de création et non la date de transfert).

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 156
    Points : 41 337
    Points
    41 337
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    j'aimerai que cela soit de moi mais ce n'est pas le cas, vu l'âge j'ai testé cette routine avec D7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button3Click(Sender: TObject);
    var
    wfad: WIN32_FILE_ATTRIBUTE_DATA;
    Ftr: Integer;
    s: String;
    begin
    GetFileAttributesEx(PChar('c:\windows'), GetFileExInfoStandard, @wfad);
    FileTimeToDosDateTime(wfad.ftCreationTime, LongRec(ftr).Hi,LongRec(ftr).Lo);
    s := formatDateTime('dd-mm-yyyy hh:nn', FileDateToDateTime(ftr));
    ShowMessage(s);
    end;
    Attention, il s'agit du temps GMT à peaufiner avec la timezone locale

    avec les versions modernes (Tokyo) System.IOUtils.TDirectory répond au besoin avec ses
    GetCreationTime(const Path: string): TDateTime;
    GetCreationTimeUtc(const Path: string): TDateTime;
    GetLastAccessTime(const Path: string): TDateTime;
    GetLastAccessTimeUtc(const Path: string): TDateTime;
    GetLastWriteTime(const Path: string): TDateTime;
    GetLastWriteTimeUtc(const Path: string): TDateTime;

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

Discussions similaires

  1. Ligne de commande pour connaitre la date de création d'un repertoire
    Par goldstar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/06/2014, 16h46
  2. Récuperer date de création d'un fichier
    Par rorobase dans le forum Access
    Réponses: 1
    Dernier message: 19/09/2008, 11h32
  3. Suppression de repertoires par dates de création
    Par chaminette dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 21/11/2007, 11h55
  4. Réponses: 7
    Dernier message: 02/05/2007, 12h17
  5. Réponses: 4
    Dernier message: 16/04/2004, 08h20

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