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 :

Questions sur la navigation dans les répertoires


Sujet :

Langage Delphi

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Merci pour taréponse, et pour la modération apr la même occassion!

    Bon, je pense que cette méthose, sera la pmlus simple pour moi.

    Mais je n'arrive aps a comprendre ce que je lis! je sais faire des petites choses, mais là ca deveint compliqué.
    Même avec le bouquin, j'ai du mal a saisir, c'est normal?

    Avant begin, puis-je mettre:

    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    Pour chercher dans les dossiers et sous dossiers de tout le Disque dur?

    ..Pas facile..J'espère ne pas être le seul dans ce cas! LOL!

  2. #22
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Tu peux faire ceci :

    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
    var tsr: TSearchRec;
         i: integer;
         chemin:string;
    begin
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    chemin:=IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE'));
    i :=FindFirst(chemin+'Test.exe',faAnyFile, tsr);
    while i = 0 do
    begin
      //Ton traitement
      ShowMessage(tsr.Name);
      i := FindNext(tsr);
    end;
    FindClose(tsr);
    end;
    Ici, on va parcourcir juste les fichiers qui ce trouvent à la racine (obtenu par GetEnvironnementVariable('HOMEDRIVE') pour voir si Test.exe s'y trouve.
    Par contre, ici, on ne rentre pas dans les dossiers et sous dossiers ...

    Tu peux faire un petit tour ici pour voir comment faire :

    http://nono40.developpez.com/sources/source0042/

    Bon courage.
    A+

  3. #23
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Bon c'est mon jour de bonté

    Voici un exemple d'appel récursif de FindFirst/FindNext pour scruter le disque entier, et renvoyer les fichiers dans un Mémo.

    J'allais te donner le lien vers les sources de Nono mais ero-sennin m'a devancé

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    const
      // Fichiers à rechercher
      Files: array[0..2] of string = ('Unit1.pas', 'Unit2.pas', 'Unit3.pas');
     
    implementation
     
    {$R *.dfm}
     
    {$WARN SYMBOL_PLATFORM OFF} // Pour éviter l'avertissement sur FindData.
     
     
    procedure ScruterDossiers(Folder: string);
     
      // Chercher si les fichers (Tableau Files) existe dans le dossier
      procedure SearchInFolder;
      var
        I: Integer;
      begin
        for I := Low(Files) to High(Files) do
          if FileExists(Folder + Files[I]) then
            Form1.Memo1.Lines.Add(Folder + Files[I] + ': trouvé !');
      end;
     
    var
      S: TSearchRec;
    begin
      Folder := IncludeTrailingPathDelimiter(Folder);
     
      // Rechercher dans le dossier
      SearchInFolder;
     
      // Isoler et traiter les sous-dossiers
      if FindFirst(Folder + '*.*', faAnyFile, S) = 0 then
      begin
        repeat
          // Ignorer les . et ..
          if (S.Name <> '.') and (s.Name <> '..') then
          begin
            if (S.Attr and faDirectory) = faDirectory then
              // Si sous-dossier: appel récursif
              ScruterDossiers(Folder + S.FindData.cFileName);
          end;
        // Recherche fichier du suivant
        until FindNext(S) <> 0;
        FindClose(S);
      end;
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Lines.Clear;
      Memo1.Lines.BeginUpdate;
     
      Button1.Enabled := False;
      Screen.Cursor := crHourGlass;
      try
        ScruterDossiers(GetEnvironmentVariable('HOMEDRIVE'));
      finally
        Button1.Enabled := True;
        Memo1.Lines.EndUpdate;
        Screen.Cursor := crDefault;
      end;
    end;

    Si tu scrutes tout ton disque, et que tu t'adonnes au tabagisme comme moi, tu peux aller en griller une !

    @+ Claudius

  4. #24
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut Cl@udius,

    J'étais justement entrain de coder cette procédure
    J'avoue, je me heurté à un petit soucis qui est celui des parcours des sous dossiers. La récursivité, j'y avais pensé mais j'ai encore du mal à voir le résultat et à le coder de façon correcte...

    En tout cas, merci pour cette source. J'y étais presque finalement
    A+

    PS :

    Pour ce qui est de l'erreur de la plateform, c'est que FindData n'est pas dispo sous Linux ou un c'est aussi valable pour certaines versions de Windows ?

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut à tous mes sauveurs!

    Bon, bonne nouvelle, je commence a comprendre les synthaxes!

    Par contre, oui je sais.., j'aimerais savoir, j'oublie tout ce que j'ai pu faire avant avec mes if etc non?
    cela n'a aucun rapport?

    Si j'ai bien saisi le truc, je dois maintenant, rajouter le nom de mes fichiers a chercher?

  6. #26
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Oui, tu dois mettre le nom de tes fichiers à chercher, et pour ce faire, il suffit de modifier ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const
      // Fichiers à rechercher
      Files: array[0..2] of string = ('Unit1.pas', 'Unit2.pas', 'Unit3.pas');
    Prends soin de modifier la taille du tableau en fonction du nombre de fichiers à rechercher...

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Ha! Je suis super content, car je savais que c'était ça a modifier, mais j'ai préféré demander avant!

    Je suis bouche ouverte quand je vois vos connaissances..pfffffffffff

    Donc, là, je peux lancer une nouvelle application.net et copier tout ceci.!

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    vous êtes tous geniaux!!!

    Serieusement, j'ai cru que jamais je n'aurais pu comprendre un tel langage, mais avec votre aide, cela fonctionne!
    Je viens de créer des fichiers un peu partout sur le disque dur, et ils sont - ->TOUS<- - trouvés!

    Bon, c'est pas pour autant que j'ai plus de questions hein?!

    Mais je vais quand même essayer de me débrouiller seul là!

    Je ne m'empecherai pas de vous citer dans ce logiciel en cours de création, promis!

  9. #29
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    PS :

    Pour ce qui est de l'erreur de la plateform, c'est que FindData n'est pas dispo sous Linux ou un c'est aussi valable pour certaines versions de Windows ?
    FindData n'est dispo que pour Win32 sauf erreur.


    @belle
    Ravi que tu aies abouti.
    Je ne m'empecherai pas de vous citer dans ce logiciel en cours de création, promis!
    On en demandait pas tant !


    @+

  10. #30
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ...
     if (S.Attr and faDirectory) = faDirectory then
    ...
    Attention, là, quand même... (j'ai pas Delphi ouvert et un peu la flemme d'expérimenter [dure semaine...]), mais j'ai quand même extrait de mon sdk en cherchant WIN32_FIND_DATA :
    FILE_ATTRIBUTE_HIDDEN = The file or directory is hidden. It is not included in an ordinary directory listing.
    Et y en a d'autres, à voir...

    Mes 2 cts,
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #31
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    FindData n'est dispo que pour Win32 sauf erreur.
    Oki, ça marche

    @belle5656

    Content que l'on ai pu t'aider et que tu sois ravi à ce point

  12. #32
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut à tous!

    Vous avez quand même pas cru que j'étais parti hein?

    Bon, tout fonctionne, c'est cool.

    Par contre, j'aimerais, ionscrire ce que je trouve, dans un rapport texte..

    voici ce que j'ai rentré, mais cela ne fonctionne pas, ça me me mets, une erreur interne de...

    Au départ, je crée le rapport direct via TForm1, de cette façon, il se crée automatiquement a l'ouverture du programme.

    J'ai pensé, a faire ceci:

    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
    (...)
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
    F: TextFile;
    begin
    ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    Memo1.Clear;
        AssignFile(F, 'Rapport.txt');
        Rewrite(F);
        Writeln(F, 'Ce programme, va..............');
        Writeln(F, 'Crée par................................');
    end;
     
     
     
    procedure ScruterDossiers(Folder: string);
     
      // Chercher si les fichers (Tableau Files) existe dans le dossier
      procedure SearchInFolder;
      var
        I: Integer;
        F : TextFile;
      begin
        for I := Low(Files) to High(Files) do
          if FileExists(Folder + Files[i]) then
            Form1.Memo1.Lines.Add(Folder + Files[i] + ': trouvé !');
            Writeln(F,Folder + Files[i] + ': trouvé !');
               Closefile(F); 
      end;
     
    (...)
    voilà, de cettefaçon , cela bloque.

    Si vous avez une idée..

    MErci encore.

  13. #33
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par belle5656 Voir le message
    voilà, de cettefaçon , cela bloque.
    A ben vi, ça bloque !
    Si tu mets un CloseFile dans la procedure imbriquée SearchInFolder (qui est appelée pour chaque dossier scruté), là forcément ca va coincer: Erreur E/S ton fichier n'est plus ouvert.

    L'idée d'ouvrir ton fichier rapport sur le Create de la fiche pourquoi pas, mais dans ce cas il faut le fermer sur le Destroy.

    Personnellement j'ouvrirais mon fichier rapport juste avant l'appel de ScruterDossier pour le fermer juste après. Si je reprends le code que je t'ai donné en exemple:
    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
     
    var
      Form1: TForm1;
      F: TextFile;
     
    const
      // Fichiers à rechercher
      Files: array[0..2] of string = ('Unit1.pas', 'Unit2.pas', 'Unit3.pas');
     
    implementation
     
    // ...
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Lines.Clear;
      Memo1.Lines.BeginUpdate;
     
      Button1.Enabled := False;
      Screen.Cursor := crHourGlass;
      try
        AssignFile(F, 'Rapport.txt');   // Ouverture
        Rewrite(F);
        ScruterDossiers(GetEnvironmentVariable('HOMEDRIVE'));
      finally
        Button1.Enabled := True;
        Memo1.Lines.EndUpdate;
        Screen.Cursor := crDefault;
        CloseFile(F);                      // Fermeture
      end;
    end;
    et ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      procedure SearchInFolder;
      var
        I: Integer;
      begin
        for I := Low(Files) to High(Files) do
          if FileExists(Folder + Files[I]) then
          begin
            Form1.Memo1.Lines.Add(Folder + Files[I] + ': trouvé !');
            WriteLn(F, Folder + Files[I] + ': trouvé !');
          end;
      end;
    Voilou.

    @+ Claudius

  14. #34
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    Salut Cl@udius

    Merci, mais j'ai essayer ceci, et j'ai toujours une erreur E/S 103.

    Surtout, quand cette ligne est présente:

    procedure SearchInFolder;
    var
    I: Integer;
    begin
    for I := Low(Files) to High(Files) do
    if FileExists(Folder + Files[i]) then
    begin
    Form1.Memo1.Lines.Add(Folder + Files[i] + ': trouvé !');
    WriteLn(F, Folder + Files[i] + ': trouvé !');
    end;
    end;

  15. #35
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Ton AssignFile et CloseFile sont où ?

  16. #36
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Re,

    Pareil que sur ton exemple.

    il est pas possible, tu crois, de regrouper la fonction du rapport.txt sur l'ensemble de la procedure procedure TForm1.Button1Click?

    Remarque, j'ai essayer en regroupant dans procedure TForm1.Button1Click, mais ça blqoue ici WriteLn(F, Folder + Files[i] + ': trouvé !');
    Mais bon, là c'est logique

  17. #37
    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 078
    Points
    8 078
    Par défaut
    Salut
    Tu pourrais nous donner ton code pour voir où tu en es?
    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

  18. #38
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Fais voir ton code de Button1Click !

    [edit] grillé! Pedro est à la rescousse [/edit]

  19. #39
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Yep,

    Salut Pedro

    Merci d'intervenir a ton tour..J'suis un rien gaté là avec vous


    Voilà où j'en suis:

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, XPMan, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Button2: TButton;
        XPManifest1: TXPManifest;
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
      const
      // Fichiers à rechercher
      Files: array[0..60] of string = ('***', '***', '***', (...));
     
     
    implementation
     
    {$R *.dfm}
    {$WARN SYMBOL_PLATFORM OFF} // Pour éviter l'avertissement sur FindData.
     
     
    procedure ScruterDossiers(Folder: string);
     
      // Chercher si les fichers (Tableau Files) existe dans le dossier
      procedure SearchInFolder;
      var
        I: Integer;
        F : TextFile;
      begin
        for I := Low(Files) to High(Files) do
          if FileExists(Folder + Files[i]) then
          begin
            Form1.Memo1.Lines.Add(Folder + Files[i] + ': trouvé !');
            WriteLn(F, Folder + Files[i] + ': trouvé !');
     
      end;
      end;
     
    var
      S: TSearchRec;
    begin
      Folder := IncludeTrailingPathDelimiter(Folder);
     
      // Rechercher dans le dossier
      SearchInFolder;
     
      // Isoler et traiter les sous-dossiers
      if FindFirst(Folder + '*.*', faAnyFile, S) = 0 then
      begin
        repeat
          // Ignorer les . et ..
          if (S.Name <> '.') and (s.Name <> '..') then
          begin
            if (S.Attr and faDirectory) = faDirectory then
              // Si sous-dossier: appel récursif
              ScruterDossiers(Folder + S.FindData.cFileName);
          end;
        // Recherche fichier du suivant
        until FindNext(S) <> 0;
        FindClose(S);
      end;
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var
    F: TextFile;
    begin
      Memo1.Lines.Clear;
      Memo1.Lines.BeginUpdate;
     
      Button1.Enabled := False;
      Screen.Cursor := crHourGlass;
      try
      ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
      AssignFile(F, 'Rapport.txt');   // Ouverture
        Rewrite(F);
        ScruterDossiers(GetEnvironmentVariable('HOMEDRIVE'));
      finally
        Button1.Enabled := True;
        Memo1.Lines.EndUpdate;
        Screen.Cursor := crDefault;
        CloseFile(F);
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Application.MessageBox(*****************,
    'Quitter',MB_OK);
    Application.Terminate;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
     begin
     Memo1.Clear;
     end;
     
    end.
    voili voulou

  20. #40
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Yep !

    Tu te mélanges les pinceaux avec la variable F !!

    1. Supprime la déclaration de F dans SearchInFolder
    2. Supprime également la déclaration de F dans Bouton1Click.
    3. Ajoute maintenant la déclaration de F pour qu'elle soit visible partout dans l'unité juste après Form1: TForm1, comme dans mon exemple au dessus.


    @+ Claudius

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

Discussions similaires

  1. Question sur la recherche dans les chaînes de caractères
    Par Garamante dans le forum VBScript
    Réponses: 5
    Dernier message: 15/12/2008, 17h33
  2. question idiote sur terme utilisé dans les offres
    Par coyott dans le forum Emploi
    Réponses: 4
    Dernier message: 24/08/2005, 17h16
  3. Association navigables dans les deux sens
    Par DarkNagash dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 13/07/2005, 15h11
  4. Navigation dans les objets
    Par hunter dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/05/2005, 11h31
  5. Informations sur un exe (dans les propriétés windows)
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 06/07/2004, 18h20

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