Ce composant permet de parcourir une arborescence.
On peut spécifier:
-le filtre (*.*), etc...
-les attributs
-Si l' on parcourt les sous-répertoires
Note: j'ai modifie le zip marchait pas, je mets le code directement:
Source / Exemple :
unit VUXFileScanner;
{
Composant TVUXFileScanner
Développé par:
VUX (vux@fr.st)
Composant non visuel permettant de parcourir une arborescence de
répertoires/sous répertoires.
Petit bug connu: Pour parcourir les sous répertoires, la propriété
filter doit être obligatoirement : "*.*"
Version actuelle: 1.0
Mises à jour:
}
interface
uses
Windows, Messages, SysUtils, Classes,FileCtrl;
type
TDataFoundEvent = procedure(Sender :Tobject;FileName:String;
const Filedata:TSearchRec;var Stop: Boolean) of object;
{ Evenement utilisé lorsque l' on a trouvé un fichier.
\-Filename : Nom du fichier
\-FileData : Informations sur le fichier
\-Stop : Si vous le passez à True, le Scan est interrompu. }
TFileAttributes = class(Tpersistent)
public
FatReadOnly : Boolean;
FatHidden : Boolean;
FatSysFile : Boolean;
FatVolumeID : Boolean;
FatDirectory : Boolean;
FatArchive : Boolean;
FatAnyFile : Boolean;
published
property atReadOnly : Boolean read FatReadOnly write fatreadonly;
property atHidden : Boolean read FatHidden write FatHidden;
property atSysFile : Boolean read FatSysFile write FatSysFile;
property atVolumeID : Boolean read FatVolumeID write FatVolumeID;
property atDirectory : Boolean read FatDirectory write FatDirectory;
property atArchive : Boolean read FatArchive write FatArchive;
property atAnyFile : Boolean read FatAnyFile write FatAnyFile;
end;
TVUXFileScanner = class(tcomponent)
private
FBaseDir,FFilter : string;
FRecurse,FStop : Boolean;
Fattrib : TFileAttributes;
FOnDataFound : TDataFoundEvent;
FOnScanComplete,FOnStop : TNotifyEvent;
procedure EnumFiles(Basedir,Filter : string);
procedure EnumFilesRec(Basedir,Filter : string);
function GetAttrCode : Integer;
procedure SetAttrib(Value : TFileAttributes);
public
constructor Create(AOwner :Tcomponent) ; override;
procedure Scan;
destructor Destroy;override;
published
Property Attributes : TFileAttributes read Fattrib write Setattrib;
Property OnDataFound : TDataFoundEvent read FOnDataFound write FOnDataFound;
Property OnScanComplete : TNotifyEvent read FOnScanComplete write FOnScanComplete;
Property OnStop : TNotifyEvent read FOnStop write FonStop;
Property Recurse : Boolean read Frecurse write Frecurse;
Property BaseDir : string read FBaseDir write FBaseDir;
Property Filter : string read FFilter write FFilter;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('VUX Utils', [TVUXFileScanner]);
end;
constructor TVUXFileScanner.Create(AOwner : Tcomponent);
begin
inherited Create(AOWner);
Fattrib := TFileAttributes.Create;
end;
destructor TVUXFileScanner.Destroy;
begin
Fattrib.Free;
inherited destroy;
end;
procedure TVUXFileScanner.SetAttrib(Value : TFileAttributes);
begin
Fattrib.AssignTo(Value);
end;
procedure TVUXFileScanner.Scan;
begin
FStop := False;
if copy(FBaseDir,length(FBasedir),1) <> '\' then
Fbasedir := Fbasedir + '\';
if Frecurse then EnumFilesRec(FBaseDir,FFilter)
else EnumFiles(FBaseDir,FFilter);
If Fstop then begin
If assigned(OnStop) then OnStop(self);
end else
If assigned(OnScanComplete) then OnscanComplete(self);
end;
function TVUXFileScanner.GetAttrCode : Integer;
var
Tmp : Integer;
begin
Tmp := 0;
If Fattrib.atAnyFile then
tmp := FaAnyFile
else begin
If Fattrib.atReadOnly then tmp := tmp + faReadOnly;
If Fattrib.atHidden then tmp := tmp + fahidden;
If Fattrib.atSysFile then tmp := tmp + faSysFile;
If Fattrib.atVolumeID then tmp := tmp + faVolumeID;
If Fattrib.atDirectory then tmp := tmp + faDirectory;
If Fattrib.atArchive then tmp := tmp + faArchive;
end;
Result := Tmp;
end;
procedure TVUXFileScanner.EnumFiles(Basedir,Filter : string);
var
Fdata: TSearchRec;
Search: string;
Hfile: integer;
begin
search := Basedir + Filter;
Hfile := findfirst(search,getattrcode,Fdata);
if (Hfile = 0) then
begin
repeat
if (Fdata.Name <> '.') and (Fdata.name <> '..') then begin
If assigned(OnDataFound) then
ondatafound(self,BaseDir + Fdata.Name,Fdata,FStop);
end;
until (FindNext(Fdata) <> 0) or FStop = True;
end;
findclose(fdata);
end;
procedure TVUXFileScanner.EnumFilesRec(Basedir,Filter : string);
var
Fdata: TSearchRec;
Search: string;
Hfile: integer;
begin
search := Basedir + Filter;
Hfile := findfirst(search,getattrcode,Fdata);
if (Hfile = 0) then
begin
repeat
if (Fdata.Name <> '.') and (Fdata.name <> '..') then begin
If assigned(OnDataFound) then
ondatafound(self,BaseDir + Fdata.Name,Fdata,Fstop);
if Directoryexists(Basedir + Fdata.name) then begin
EnumFilesRec(Basedir + fdata.Name + '\',Filter);
end;
end;
until (FindNext(Fdata) <> 0) or FStop = True;
end;
findclose(fdata);
end;
end.
9 mai 2004 à 18:55
le zip de ta source semble avoir morfle, surement au dernier crash chez l'hebergeur.
Serait bien d'en remettre un valide, merci d'avance.
BruNews, Admin CS, MVP Visual C++
ciao...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.