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

Delphi Discussion :

[debutant]Comment récupérer tout les fichiers d'un répertoire?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut [debutant]Comment récupérer tout les fichiers d'un répertoire?
    Bonjour....

    Je suis dans un projet VCL et je souhaite récupérer dans une listBox tout les répertoires d'un répertoire donnée et dans une deuxieme listbox tout les fichiers de ce meme répertoire donnée...

    Est ce possible et si oui comment dois je m'y prendre?

    Merci d'avance...

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Regarde du côté des fonctions findFirst et findNext, et selon l'attribut tu pourras en déduire si c'est un fichier ou un directory

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var DirInfo: TSearchRec;
    begin
      if findFirst('*.*',faAnyFile,DirInfo) = 0
      then repeat
                if DirInfo.Attr and faDirectory = faDirectory
             then //c'est un directory ajout dans la listBox
                  else //c'est un fichier ajout dans la listBox
             until FindNext(DirInfo) = 0;
    end;
    Tu récupères le nom du fichier par dirInfo.Name.
    Regarde ensuite du côté des fonction ExtractFileName,ExtractFilePath... pour récupérer les informations contenues dans un nom de fichier (fileName,Path...)
    Donc regarde de près la définition de TSearchRec et tu connaîteras tout ce que tu peux récupérer (taille, date...)

    Attention, tout ce qui concerne les attributs de sécurité ACE, ne sont pas accessibles par cette méthode.

    Couplé à cela tu peux également récupérer les dates de création, modification et de derniers accés au fichier. C'est une QR de la FAQ dont voici le code.

    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
    // Retourne les informations concernant les dates d'un fichier
    // Date création, modification et dernier accés
    function 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;
    Par ailleurs, si tu désires effectuer un traitement sur tous les fichiers d'une arborescence, voici le code d'une déscente récursive. A adapter selon tes besoins, répertoire initial etc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure lectureRecursive;
    var DirInfo: TSearchRec;
    begin
      if findFirst('*.*',faAnyFile,DirInfo) = 0
       then repeat
              if DirInfo.Attr and faDirectory = faDirectory
                then lectureRecursive
                else //Mon traitement sur fichier
              until FindNext(DirInfo) = 0;
    end;
    Cordialement

  3. #3
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut

    vous pouvez aussi regarder du coté des composant Liste de répertoires et Liste de fichiers (désolé si je ne souviens pas du nom exact des composants).

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut
    Et est ce que je peux connaitre tout les répertoire qui sont au niveau juste au dessus d'un répertoire donné....

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Il suffit d'utiliser un combiné entre la fonction chdir et ce que je t'ai donné plus haut soit findFirst et findNext en filtrant avec faDirectory

    Donc procedure à mettre en place
    - 1 chdir(le_répertoire_donné);
    - 2 chdir('..'); // pour remonter d'un niveau dans l'arborescence
    - 3 Faire un FindFirst/FindNext et en extraire la liste des répertoires

    Cordialement

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut
    Alors voila ce que je fais....

    Voici mon arborescence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
               c:
               |
       ---------------     
      |                    |
     repertoire1      repertoire2
                                |
                        ------------
                       |                |
                 repertoire3    repertoire4
    voici mon code:
    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
     
    var
       TSR_RepertoireNiveau1   : TSearchRec;
       TSR_RepertoireNiveau2  : TSearchRec;
    begin
      If FindFirst('c:\'+'*.*',faDirectory,TSR_RepertoireNiveau1)=0 Then
       begin
         repeat
              ListBox1.Items.Add(TSR_RepertoireNiveau1.FindData.cFileName);
              If FindFirst('c:\'+TSR_RepertoireNiveau1.FindData.cFileName+'\'+'*.*',faDirectory,TSR_RepertoireNiveau2)=0 Then
                begin
                  repeat
                      ListBox2.Items.Add(TSR_RepertoireNiveau2.FindData.cFileName);
                  Until FindNext(TSR_RepertoireNiveau2)<>0;
                end;
                FindClose(TSR_RepertoireNiveau2);
         Until FindNext(TSR_RepertoireNiveau1)<>0;
       end;
       FindClose(TSR_RepertoireNiveau1);
    Et ca... ca ne marche pas au niveau de mon repertoireNiveau2 je récupere tout (niveau 1 +2)....

    Qu'est ce qu'il ne va pas dans mon code???

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/06/2008, 13h07
  2. Comment récupérer toutes les valeurs dans :params avec form_tag ?
    Par Didier Pitre dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 17/04/2008, 10h33
  3. comment copier tout les fichier d'un répertoire?
    Par UnSofteuxAmateur dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/10/2007, 10h30
  4. Réponses: 4
    Dernier message: 24/09/2004, 10h17

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