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. #61
    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,

    Ouile voilà, je l'avais mis un peu plus haut

    Je crois que j'ai fait n'importe quoi avec le code du bouton qui doit se charger de la suppression..

    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
    procedure Suppression(Folder: string);
    var
    I: Integer;
    E: Integer;
    begin
    Deletefile(Folder + files[i]);
    If Deletefile(Folder + Files[i]) then
    begin
    Form1.Memo1.Lines.Add(Folder + Files[i] + ': supprimé!');
           WriteLn(F, Folder + Files[i] + ': supprimé!')
           end
    else
    begin
    Form1.Memo1.Lines.Add(Folder + Files[i] + ': non supprimé!');
           WriteLn(F, Folder + Files[i] + ': non supprimé!')
    end;
     
    EffaceDossier(Folder + Folders[e] );
    if EffaceDossier(Folder + Folders[e]) then
    begin
    Form1.Memo1.Lines.Add(Folder + Folders[e] + ': supprimé!');
           WriteLn(F, Folder + Folders[e] + ': supprimé!')
           end
    else
    begin
    Form1.Memo1.Lines.Add(Folder + Folders[e] + ': non supprimé!');
           WriteLn(F, Folder + Folders[e] + ': non  supprimé!')
           end;
    end;
     
     
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    Suppression(GetEnvironmentVariable('HOMEDRIVE'));
    end;

  2. #62
    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
    Euh une question: tu l'initialises quand i ?
    Si tu l'utilises, il FAUT l'initialiser!
    Sinon pour éviter de te trimballer la variable F et faire des WriteLn partout, tu pourrais aussi enregistrer à la fin le contenu du Memo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1.Memo1.Lines.SaveToFile(LeFichierEnQuestion);
    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. #63
    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,

    Euh une question: tu l'initialises quand i ?
    comment ça?

    elle est déclarer là non? Il faut que je mette avant if DeleteFile une variable For?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for I := Low(Files) to High(Files) do

  4. #64
    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
    Citation Envoyé par belle5656 Voir le message
    elle est déclarer là non? Il faut que je mette avant if DeleteFile une variable For?
    Elle est déclarée certes, mais elle n'est pas initialisée et tu utilises juste après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Deletefile(Folder + Files[i])
    Donc problème: il vaut quoi i?
    J'ai l'impression que tu te mélanges les pinceaux avec tes variables
    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

  5. #65
    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
    Y a aussi un autre truc qui me chagrine, c'est qu'il manque IncludeTrailingPathDelimiter lorsque tu passes ton paramètre à ta procédure.

    Remplace ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Suppression(GetEnvironmentVariable('HOMEDRIVE'));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Suppression(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));

  6. #66
    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
    Citation Envoyé par ero-sennin Voir le message
    Y a aussi un autre truc qui me chagrine, c'est qu'il manque IncludeTrailingPathDelimiter lorsque tu passes ton paramètre à ta procédure.

    Remplace ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Suppression(GetEnvironmentVariable('HOMEDRIVE'));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Suppression(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    Effectivement mais cette erreur ne provoque pas de violation d'accès

    le mieux, serait que tu nous fournisses tout 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

  7. #67
    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 Pedro
    Effectivement mais cette erreur ne provoque pas de violation d'accès

    le mieux, serait que tu nous fournisses tout ton code pour voir où tu en es.
    Oué mais une erreur tout de même .

    +1 pour le code intégral

  8. #68
    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 à tous,

    Ok pour le code entier c'est parti!

    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, XPMan, StdCtrls;
     
    type
      TForm1 = class(TForm)
        XPManifest1: TXPManifest;
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        Label2: TLabel;
        Label1: TLabel;
        Label3: TLabel;
        Button5: TButton;
        procedure Button5Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      F : TextFile;
     
      const
      // Fichiers à rechercher
      Files: array[0..13] of string = (...)
      Folders: array[0..9] of string = (...)
     
    implementation
     
    {$R *.dfm}
     
    {$WARN SYMBOL_PLATFORM OFF} // Pour éviter l'avertissement sur FindData.
     
     
     
    function EffaceDossier(Dossier: String): Boolean;
     var FileOpStruct: TShFileOpStruct;
      begin
        FileOpStruct.Wnd := 0;
        FileOpStruct.wFunc := FO_DELETE;
        FileOpStruct.pFrom := PChar(Dossier);
        FileOpStruct.pTo := Nil;
        FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
        FileOpStruct.lpszProgressTitle := Nil;
        Result := ShFileOperation(FileOpStruct) = 0;
      end;
     
     
     
     
    procedure ScruterDossiers(Folder: string);
     
      // Procédure de recherche dossiers + fichiers
      procedure SearchInFolder;
      var
        I: Integer;
        E: Integer;
     
        begin
          for E:=Low(Folders) to High(Folders) do
            if DirectoryExists(folder + Folders[E]) then
              begin
                Form1.Memo1.Lines.Add(Folder + Folders[E]+': trouvé !');
                WriteLn(F, Folder + Folders[E] + ': trouvé!');
     
        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;
           end;
    var
      S: TSearchRec;
    begin
      Folder := IncludeTrailingPathDelimiter(Folder);
      SearchInFolder;
      if FindFirst(Folder + '*.*', faAnyFile, S) = 0 then
      begin
        repeat
          if (S.Name <> '.') and (s.Name <> '..') then
          begin
            if (S.Attr and faDirectory) = faDirectory then
              ScruterDossiers(Folder + S.FindData.cFileName);
          end;
        until FindNext(S) <> 0;
        FindClose(S);
      end;
    end;
     
     
    // Procédure Bouton recherche
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Memo1.Clear;
    Memo1.Lines.Clear;
      Memo1.Lines.BeginUpdate;
      Button1.Enabled := False;
      Button2.Enabled := False;
      Screen.Cursor := crHourGlass;
      try
      ChDir(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
      AssignFile(F, 'rapport.txt');   // création du rapport 
        Rewrite(F);
        writeln(F,'                     rapport des fichiers trouvés');
        writeln(F,'');
        writeln(F,'');
        writeln(F,'');
        writeln(F,'Début de scan:');
        writeln(F,'');
     
     
        ScruterDossiers(GetEnvironmentVariable('HOMEDRIVE'));
      finally
        Button1.Enabled := True;
        Button2.Enabled := True;
        Button3.Enabled := True;
        Button4.Enabled := True;
        Memo1.Lines.EndUpdate;
        Screen.Cursor := crDefault;
        CloseFile(F);
      end;
    end;
     
     
    procedure Suppression(Folder: string);
    var
    I: Integer;
    E: Integer;
    begin
    for I := Low(Files) to High(Files) do
    If Deletefile(Folder + Files[i]) then
    begin
    Form1.Memo1.Lines.Add(Folder + Files[i] + ': supprimé!');
           WriteLn(F, Folder + Files[i] + ': supprimé!');
           end
    else
    begin
    Form1.Memo1.Lines.Add(Folder + Files[i] + ': non supprimé!');
           WriteLn(F, Folder + Files[i] + ': non supprimé!');
    end;
     
     for E:=Low(Folders) to High(Folders) do
    if EffaceDossier(Folder + Folders[e]) then
    begin
    Form1.Memo1.Lines.Add(Folder + Folders[e] + ': supprimé!');
           WriteLn(F, Folder + Folders[e] + ': supprimé!');
           end
    else
    begin
    Form1.Memo1.Lines.Add(Folder + Folders[e] + ': non supprimé!');
           WriteLn(F, Folder + Folders[e] + ': non  supprimé!');
           end;
    end;
     
     
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    Suppression(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Memo1.Clear;
    Label1.caption:=(' ');
    Label3.caption:=(' ');
    end;
     
     
     
    // Procédure du boutton Quitter
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Application.Terminate;
    end;
     
     
     
     
     
    end.

  9. #69
    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
    Effectivement avec tout le code, i est correctement initialisé


    Sinon, pourrais-tu nous dire sur quelle ligne se produit l'erreur?
    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

  10. #70
    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,

    comment je peux le voir?

    En pas à pas, il reste bloqué.

    Et sinon, là maintenant, j'ai erreur E/S103

  11. #71
    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
    Citation Envoyé par belle5656 Voir le message
    Et sinon, là maintenant, j'ai erreur E/S103
    Il y a donc une erreur sur l'accès à tes fichiers
    Vérifie bien que les noms de fichier et de répertoire soient corrects.
    Sinon, pour information, pour avoir le nom du fichier/répertoire, as-tu contrôlé que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    S.FindData.cFileName
    renvoyait bien le nom du fichier?
    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

  12. #72
    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,

    Ca doit être correct, vu que la recherche se déroule comme il faut, il me trouve bien tout ce que j'attends comme résultat.
    C'est juste sur la suppression que ça bloque quoi..

  13. #73
    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,

    Pour faire avancer la chose, quand je mets dans procedure Suppression(Folder: string);

    for E:=Low(Folders) to High(Folders)

    J'ai l'erreur E/S 103.

    Et quand je le retire, j'ai l'erreur de violation d'accés.

    Je sais pas si ça peut aider, mais pour le cas ou.

    @++

  14. #74
    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,

    Le soucis qui se pose, c'est que tu demandes au programme d'écrire dans un fichier alors que ce dernier tu l'as fermé dans la procédure Button1Click.

    Si tu veux que celà fonctionne pour la suppression, il te faut :
    - Soit créer un nouveau fichier
    - Soit reprendre le fichier rapport.txt

    Niveau code, ça donne un truc de ce genre :

    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
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    // Test si le fichier existe
    if FileExists('rapport.txt')then
    begin
    // Il existe donc on prépare le fichier pour l'ajout de texte à la fin
    AssignFile(F, 'rapport.txt');
    Append(F);
    end
    else
    begin
    // Il existe pas donc on le crée
    AssignFile(F, 'rapport.txt');
    Rewrite(F);
    end;
    Suppression(IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE')));
    //On ferme le fichier
    CloseFile(F);
    end;
    Voilà, logiquement plus d'erreur, après, en ce qui concerne la suppression, je n'ai pas trop testé, faute de temps ce matin. En tout cas j'espère que ca fonctionnera correctement

    Bon courage.
    A+

  15. #75
    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 Ero-sennin, c'était bien ça en fait.

    APr contre, le code du supression ne fonctionne pas, car il ne supprime pas ce que la Recherche a trouvé en premier lieu!

    Je devrais le déplacer ce code?

  16. #76
    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

    Pourquoi avoir séparé la suppression de la recherche ? Est-il génant que cela soit fait en même temps ?

    Citation Envoyé par Belle5656
    APr contre, le code du supression ne fonctionne pas, car il ne supprime pas ce que la Recherche a trouvé en premier lieu!
    Oui c'est normal au regard de ton code !

    @+

  17. #77
    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,

    Comme le dit Cl@udius, c'est normal que ca ne fonctionne pas au vu de ton code. En effet, lors de la recherche, on perd toutes informations sur les fichiers/dossiers localisés à supprimer.

    Si tu veux supprimer les fichiers en dehors de la recherche, il te faut mémoriser les emplacements des fichiers à supprimer.

    Pour celà, il faudrait déclarer une StringList qui contiendra la liste des fichiers à supprimer...

  18. #78
    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 j'ai codé ceci, cela devrait répondre à ton besoin.

    La fiche comporte un Memo, 3 boutons (Rechercher, Supprimer et Quitter).
    Le code est documenté ce qui est toujours un bon réflexe.

    Les contrôles sont nommés (pas de Bouton1, Bouton 25 ou Edit34 ).

    J'ai repris 2 idées:
    La 1° de Pedro qui proposait d'enregistrer le contenu du memo vers le fichier log 'Rapport.txt'. Ceci étant effectué avant la fermeture de l'appli.

    Et celle d'Ero-Sennin qui proposait l'utilisation d'un StringList pour stocker les fichiers à supprimer, puisque tu tiens visiblement à séparer recherche et suppression.

    Voici l'unité complète:
    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
     
    unit Unit1;
     
    interface
     
    uses
      Windows, SysUtils, Forms, StdCtrls, Classes, Controls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        PanelTop: TPanel;             /// Panel contenants les boutons
        BtnRechercher: TButton;       /// Bouton 'Rechercher'
        BtnQuitter: TButton;          /// Bouton 'Quitter'
        BtnSupprimer: TButton;        /// Bouton 'Supprimer'
        Memo1: TMemo;                 /// Memo: Réception des infos
        procedure FormCreate(Sender: TObject);
        procedure BtnRechercherClick(Sender: TObject);
        procedure BtnQuitterClick(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure BtnSupprimerClick(Sender: TObject);
      private
        { Déclarations privées }
        FStartFolder: string;         /// Dossier de démarrage de la recherche et de Rapport.txt
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;          /// Variable d'instance de la Fiche
      NbFolders: Integer;     /// Nombre de dossiers trouvés lors de la recherche
      SLFiles: TStringList;   /// StringList contenant les fichiers trouvés
     
    const
      /// Dossiers cibles
      Folders: array[0..3] of string = ('Dossier1', 'Dossier2', 'Dossier3', 'Dossier4');
      /// Fichiers à rechercher dans les dossiers cibles
      Files: array[0..2] of string = ('Unit1.dcu', 'Unit2.dcu', 'Unit3.dcu');
     
    implementation
     
    {$R *.dfm}
     
    {$WARN SYMBOL_PLATFORM OFF} // Pour éviter l'avertissement sur FindData.
     
    uses
      StrUtils;
     
    {*------------------------------------------------------------------------------
      Scruter le contenu du dossier à la recherche des fichiers ou dossiers
      défini par les 2 tableaux Folders et Files
     
      @param Folder Dossier à scruter
      @return None
    ------------------------------------------------------------------------------}
    procedure ScruterDossiers(Folder: string);
      {*----------------------------------------------------------------------------
        procédure imbriquée
        Recherche des fichiers dans le dossier Folder
     
        @param None
        @return None
      -----------------------------------------------------------------------------}
      procedure SearchInFolder;
      var
        I, J: Integer;
      begin
        J := 0;   // Compteur de fichiers trouvés
        for I := Low(Files) to High(Files) do
          if FileExists(Folder + Files[I]) then
          begin
            // Un des fichiers cibles a été trouvé
            Form1.Memo1.Lines.Add('  Fichier: ' + Files[I] + ': trouvé !');
            SLFiles.Add(Folder + Files[I]);
            Inc(J);
          end;
        if J = 0 then
          Form1.Memo1.Lines.Add('  Aucun fichier trouvé');
      end;
     
      {*----------------------------------------------------------------------------
        Fonction imbriquée
        Extraire le nom du dossier du chemin d'accès
     
        @param None
        @return Nom du dossier
      -----------------------------------------------------------------------------}
      function ExtractFolderName: string;
      begin
        result := ExcludeTrailingPathDelimiter(Folder);
        result := Copy(result, LastDelimiter('\', result) + 1, MaxInt);
      end;
     
    var
      S: TSearchRec;
    begin
      Folder := IncludeTrailingPathDelimiter(Folder);
     
      // Ne rechercher les fichiers que dans les dossiers cibles
      if AnsiMatchText(ExtractFolderName, Folders) then
        SearchInFolder;
     
      if FindFirst(Folder + '*.*', faDirectory, S) = 0 then
      begin
        repeat
          // Eviter les appels récursifs sur les dossiers '.' et '..'
          if (S.Name <> '.') and (S.Name <> '..') and
             ((S.Attr and faDirectory) = faDirectory) then
          begin
            if AnsiMatchText(S.Name, Folders) then
            begin
              // Dossier cible localisé
              Form1.Memo1.Lines.Add('----------------------------------------------------------------');
              Form1.Memo1.Lines.Add('Dossier ' + Folder + S.Name);
              // Incrémenter le nombre de dossiers trouvés
              Inc(NbFolders);
            end;
            // Appel récusif de la procédure sur le dossier
            ScruterDossiers(Folder + S.FindData.cFileName);
          end;
        until FindNext(S) <> 0;
        FindClose(S);
      end;
    end;
     
    { TForm1 }
     
    {*------------------------------------------------------------------------------
      Creation de la fiche
     
      @param Sender Objet appelant
      @comment Création du StringList contenants les fichiers à supprimer
    -------------------------------------------------------------------------------}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Memo1.Clear;
      NbFolders := 0;
      SLFiles := TStringList.Create;
    end;
    {*------------------------------------------------------------------------------
      Destruction de la fiche
     
      @param Sender Objet appelant
      @comment Libération du StringList
      @comment Enregistrement de Rapport.txt dans le dossier FStartFolder
    -------------------------------------------------------------------------------}
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      // Enregistrement du contenu du Memo
      Memo1.Lines.SaveToFile(FStartFolder + 'Rapport.txt');
      // Libération
      SLFiles.Free;
    end;
    {*------------------------------------------------------------------------------
      Fermeture de l'application
     
      @param Sender Objet appelant (Bouton)
    -------------------------------------------------------------------------------}
    procedure TForm1.BtnQuitterClick(Sender: TObject);
    begin
      Self.Close;
    end;
    {*------------------------------------------------------------------------------
      Lancement de la recherche
     
      @param Sender Objet appelant (Bouton)
      @return None
      @comment Chronométrage du traitement
    ------------------------------------------------------------------------------}
    procedure TForm1.BtnRechercherClick(Sender: TObject);
    var
      Start: Cardinal;
      I: Integer;
    begin
      BtnRechercher.Enabled := False;
      BtnSupprimer.Enabled := False;
      BtnQuitter.Enabled := False;
      Screen.Cursor := crHourGlass;
     
      FStartFolder := IncludeTrailingPathDelimiter(GetEnvironmentVariable('HOMEDRIVE'));
      with Memo1.Lines do
      begin
        Clear;
        Add('================================================================');
        Add('Recherche de fichiers');
        Add('================================================================');
        Add('Début de la recherche:');
        Add(' - ' + FStartFolder);
        Add('Dossiers recherchés:');
        for I := Low(Folders) to High(Folders) do
          Add(' - ' + Folders[I]);
        Add('Fichiers recherchés:');
        for I := Low(Files) to High(Files) do
          Add(' - ' + Files[I]);
        Add('================================================================');
        Add('Début de la recherche: ' + DateTimeToStr(Now));
        Add('================================================================');
        Add('');
        BeginUpdate;
      end;
     
      try
        Start := GetTickCount;
        // Recherche des fichiers
        ScruterDossiers(FStartFolder);
        with Memo1.Lines do
        begin
          if NbFolders = 0 then
            Form1.Memo1.Lines.Add('Aucun dossier trouvé');
          Add('');
          Add('================================================================');
          Add('Durée de recherche: ' + TimeToStr(((GetTickCount - Start)/1000)/(24*3600)));
          Add('================================================================');
        end;
      finally
        BtnRechercher.Enabled := True;
        BtnSupprimer.Enabled := (SLFiles.Count > 0);
        BtnQuitter.Enabled := True;
        Memo1.Lines.EndUpdate;
        Screen.Cursor := crDefault;
      end;
     
    end;
     
    {*------------------------------------------------------------------------------
      Suppression des fichiers et dossiers
     
      @param Sender Objet appelant (Bouton)
    -------------------------------------------------------------------------------}
    procedure TForm1.BtnSupprimerClick(Sender: TObject);
    var
      I: Integer;
    begin
      with Memo1.Lines do
      begin
        Add('');
        Add('================================================================');
        Add('Suppression des fichiers');
        Add('================================================================');
        for I := 0 to SLFiles.Count - 1 do
        begin
          if DeleteFile(SLFiles[I]) then
            Add('Fichier: ' + SLFiles[I] + ' supprimé.')
          else
            Add('Fichier: ' + SLFiles[I] + ' ECHEC suppression.')
        end;
      end;
      TButton(Sender).Enabled := False;
    end;
     
    end.
    KDO !!

    @+ Claudius

  19. #79
    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,

    Ben dis donc..Pour un cadeau..C'est un superbe cadeau!

    merci infiniment!

    Bon, bien sur j'ai retouché un peu le contenu pour l'adapter a ma sauce.

    Quelques soucis néanmoins.

    Il ne supprime pas les dossiers, alors j'ai rajouté 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
    procedure TForm1.suppressionClick(Sender: TObject);
    var
      I: Integer;
      J: Integer;
    begin
      with Memo1.Lines do
      begin
        Add('');
        Add('================================================================');
        Add('Suppression des fichiers');
        Add('================================================================');
        for I := 0 to SLFiles.Count - 1 do
        begin
          if DeleteFile(SLFiles[i]) then
            Add('Fichier: ' + SLFiles[i] + ' supprimé.')
          else
            Add('Fichier: ' + SLFiles[i] + ' ECHEC suppression.')
        end;
        for J := 0 to Slfolders.count - 1 do
        begin
        if EffaceDossier(Folders[J]) then
        Add('Fichier:' + Folders[J] + ' supprimé.')
      end;
      TButton(Sender).Enabled := False;
    end;
    end;
    J'ai, bien sur déclarer SlFolders en 1er lieu.
    Et je l'ai rajouté, a chaque fois qu'il y avait SlFiles, pour équilibrer la chose.
    Seulement, meêm quand il y a un dossier trouvé, il me note qu'il n'a rien trouvé, pourtant ils sont affichés a l'écran.

  20. #80
    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
    Arf..

    Ca y est je viens d saisir pourquoi..

    Si tu veux, je dois supprimer des dossiers, et des fichiers.
    Mais, ces fichiers, ne sont pas forcement dans les dossier qui sont recherchés..
    Et les dossiers, ne contiennent pas forcemenrt les fichiers recherchés .

    Mais je pense qu'il me restera a modifier quelmques trucs du code pour que ce soit bon

+ 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