Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2830 connectés 

 


Dernière réponse
Sujet : D4 : un scan du lecteur avec jauge d'avancement
HERIBERT

[SDF]Poire a écrit a écrit :

Code :
  1. unit GFiles;
  2. interface
  3. uses
  4.   Windows, Sysutils, LZExpand, Classes;
  5. type
  6.   TFichier = class
  7.     Nom: TFileName;
  8.     Chemin: String;
  9.     Taille: Integer;
  10.     Date: Integer;
  11.     Attr: Integer;
  12.     procedure Assign(Fichier: TFichier);
  13.   end;
  14. function FSearch(Fichier : string; Path : string; Rec: Boolean) : TList;
  15. implementation
  16. function FSearch(Fichier : string; Path : string; Rec: Boolean) : TList;
  17. var
  18.   F: TSearchRec;
  19.   r: Integer;
  20.   ReturnS: TList;
  21.   MyFichier: TFichier;
  22. begin
  23.   ReturnS := TList.Create;
  24.   r := FindFirst(Path + '\' + Fichier, $03F, F);
  25.   while r = 0 do
  26.     begin
  27.     if (F.Name <> '.') and (F.Name <> '..') then
  28.     begin
  29.       MyFichier := TFichier.Create;
  30.       with MyFichier do
  31.       begin
  32.         Chemin := Path + '\';
  33.         Nom := F.Name;
  34.         Taille := F.Size;
  35.         Date := F.Time;
  36.         Attr := F.Attr;
  37.       end;
  38.       ReturnS.Add(MyFichier);
  39.     end;
  40.     r := FindNext(F);
  41.     end;
  42.   FindClose(F);
  43.   if Rec then
  44.   begin
  45.     r := FindFirst(Path + '\*.*', $03F, F);
  46.     while r = 0 do
  47.       begin
  48.       if (F.Attr and $10 <> 0) and (F.Name <> '.') and (F.Name <> '..') then
  49.         ReturnS.Assign(FSearch(Fichier, Path + '\' + F.Name, True), laOr);
  50.         //ReturnS.AddStrings(FSearch(Fichier, Path + '\' + F.Name, True));
  51.       r := FindNext(F);
  52.       end;
  53.     FindClose(F);
  54.   end;
  55.   Result := ReturnS;
  56. end;


 
Elle a subit des bidouillages rescent ;)
Fodrait que je me repenche dessus....
 :hello:  




Je vais noter ça ;)


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
HERIBERT

[SDF]Poire a écrit a écrit :

Code :
  1. unit GFiles;
  2. interface
  3. uses
  4.   Windows, Sysutils, LZExpand, Classes;
  5. type
  6.   TFichier = class
  7.     Nom: TFileName;
  8.     Chemin: String;
  9.     Taille: Integer;
  10.     Date: Integer;
  11.     Attr: Integer;
  12.     procedure Assign(Fichier: TFichier);
  13.   end;
  14. function FSearch(Fichier : string; Path : string; Rec: Boolean) : TList;
  15. implementation
  16. function FSearch(Fichier : string; Path : string; Rec: Boolean) : TList;
  17. var
  18.   F: TSearchRec;
  19.   r: Integer;
  20.   ReturnS: TList;
  21.   MyFichier: TFichier;
  22. begin
  23.   ReturnS := TList.Create;
  24.   r := FindFirst(Path + '\' + Fichier, $03F, F);
  25.   while r = 0 do
  26.     begin
  27.     if (F.Name <> '.') and (F.Name <> '..') then
  28.     begin
  29.       MyFichier := TFichier.Create;
  30.       with MyFichier do
  31.       begin
  32.         Chemin := Path + '\';
  33.         Nom := F.Name;
  34.         Taille := F.Size;
  35.         Date := F.Time;
  36.         Attr := F.Attr;
  37.       end;
  38.       ReturnS.Add(MyFichier);
  39.     end;
  40.     r := FindNext(F);
  41.     end;
  42.   FindClose(F);
  43.   if Rec then
  44.   begin
  45.     r := FindFirst(Path + '\*.*', $03F, F);
  46.     while r = 0 do
  47.       begin
  48.       if (F.Attr and $10 <> 0) and (F.Name <> '.') and (F.Name <> '..') then
  49.         ReturnS.Assign(FSearch(Fichier, Path + '\' + F.Name, True), laOr);
  50.         //ReturnS.AddStrings(FSearch(Fichier, Path + '\' + F.Name, True));
  51.       r := FindNext(F);
  52.       end;
  53.     FindClose(F);
  54.   end;
  55.   Result := ReturnS;
  56. end;


 
Elle a subit des bidouillages rescent ;)
Fodrait que je me repenche dessus....
 :hello:  




Je vais noter ça ;)

[SDF]Poire

unit GFiles;
 
interface
 
uses
  Windows, Sysutils, LZExpand, Classes;
 
type
  TFichier = class
    Nom: TFileName;
    Chemin: String;
    Taille: Integer;
    Date: Integer;
    Attr: Integer;
    procedure Assign(Fichier: TFichier);
  end;
 
function FSearch(Fichier : string; Path : string; Rec: Boolean) : TList;
 
implementation
 
 
function FSearch(Fichier : string; Path : string; Rec: Boolean) : TList;
var
  F: TSearchRec;
  r: Integer;
  ReturnS: TList;
  MyFichier: TFichier;
begin
  ReturnS := TList.Create;
  r := FindFirst(Path + '\' + Fichier, $03F, F);
  while r = 0 do
    begin
    if (F.Name <> '.') and (F.Name <> '..') then
    begin
      MyFichier := TFichier.Create;
      with MyFichier do
      begin
        Chemin := Path + '\';
        Nom := F.Name;
        Taille := F.Size;
        Date := F.Time;
        Attr := F.Attr;
      end;
      ReturnS.Add(MyFichier);
    end;
    r := FindNext(F);
    end;
  FindClose(F);
 
  if Rec then
  begin
    r := FindFirst(Path + '\*.*', $03F, F);
    while r = 0 do
      begin
      if (F.Attr and $10 <> 0) and (F.Name <> '.') and (F.Name <> '..') then
        ReturnS.Assign(FSearch(Fichier, Path + '\' + F.Name, True), laOr);
        //ReturnS.AddStrings(FSearch(Fichier, Path + '\' + F.Name, True));
      r := FindNext(F);
      end;
    FindClose(F);
  end;
 
  Result := ReturnS;
end;


 
Elle a subit des bidouillages rescent ;)
Fodrait que je me repenche dessus....
 :hello:

[SDF]Poire

HERIBERT a écrit a écrit :

 
Moi, même en C, et avec algo à l'appui, je n'ai jamais pu définir un algo net pour le scan du lecteur :??: Je bidouillais. Par contre, avec de simples boucles, Bardou est arrivé à un truc efficace :sol: Sauf qu'il laisse échapper les rep cachés, par exemple.  
 
Merci pour le truc :hello: Je vais m'y attaquer !




Moi je le fais par récurence je crois.... je vais chercher :)

HERIBERT

[SDF]Poire a écrit a écrit :

 
C exactement ce que je fais  :)  
par contre nivo optimisation C pas top....
Je chercherais si ya pas un autre moyen....
 
 
Il suffit de modifier l'unité et de compiler le package(dpk) correspondant
(il fo bien sur avoir les sources....)
 :hello:  




Moi, même en C, et avec algo à l'appui, je n'ai jamais pu définir un algo net pour le scan du lecteur :??: Je bidouillais. Par contre, avec de simples boucles, Bardou est arrivé à un truc efficace :sol: Sauf qu'il laisse échapper les rep cachés, par exemple.  
 
Merci pour le truc :hello: Je vais m'y attaquer !

[SDF]Poire

HERIBERT a écrit a écrit :

 
Oh ! Pour corriger le code, c'est facile : il suffit de rajouter une boucle. Ds le FindFirst, il teste seulement faDirectory, autrement dit l'attribut Répertoire. Il vaut mieux chercher '*.*', faAnyfile : on élimine le '.', l'éventuel '..' si l'on n'est pas en racine, et on teste chaque fichier suivant : répertoire, ou non.  




C exactement ce que je fais  :)  
par contre nivo optimisation C pas top....
Je chercherais si ya pas un autre moyen....
 

HERIBERT a écrit a écrit :

 
Pb : je pourrais corriger le code, mais je ne sais pas compiler une VCL...




Il suffit de modifier l'unité et de compiler le package(dpk) correspondant
(il fo bien sur avoir les sources....)
 :hello:

HERIBERT

[SDF]Poire a écrit a écrit :

G une unit pour ça...
(sans la jauge)
j'avais des améliorations à y porter mais je l'ai jamais fait
Si tu la veux je te la donne
sinon pour corriger le bug fodrait que tu nous dise ou trouver le code (l'url direct je suis fégnant)
 :hello:  




Oh ! Pour corriger le code, c'est facile : il suffit de rajouter une boucle. Ds le FindFirst, il teste seulement faDirectory, autrement dit l'attribut Répertoire. Il vaut mieux chercher '*.*', faAnyfile : on élimine le '.', l'éventuel '..' si l'on n'est pas en racine, et on teste chaque fichier suivant : répertoire, ou non.  
 
Pb : je pourrais corriger le code, mais je ne sais pas compiler une VCL...

[SDF]Poire G une unit pour ça...
(sans la jauge)
j'avais des améliorations à y porter mais je l'ai jamais fait
Si tu la veux je te la donne
sinon pour corriger le bug fodrait que tu nous dise ou trouver le code (l'url direct je suis fégnant)
 :hello:
HERIBERT J'en ai vu passer une... et je l'ai perdue.  
La VCL de M. Bardou comporte (ds la version que j'ai en tt cas) une léger bug, laissant passer les répertoires ayant un attribut supplémentaire à celui du bit Directory. Vieux bug bien connu sous DOS, d'ailleurs.  
 
Vs auriez pas une idée ? En plus, c'est un freeware :love:
 
Merci :hello:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)