Welche Delphi-Version verwendest du denn?
zumindest ab D7 gibt's die Komponente TShellTreeView.
mit diesem Code kannst du alle Dateien/Verzeichnisse in einem Verzeichniss ermitteln:
Delphi-Quellcode:
function dirup(s:string):string;
begin
try
if s[length(s)]='\' then result:=s else result:=s+'\'
except
result:=s;
end;
end;
procedure getdirsindir(const verzeichniss:string;var dirs:tstringlist);
var
sd:string;
s:tsearchrec;
i:integer;
begin
dirs:=tstringlist.Create;
sd:=dirup(verzeichniss);
if findfirst(sd+'*.*',faanyfile,s)<>0 then begin
sysutils.findclose(s);
exit;
end;
dirs.add(s.Name);
while findnext(s)=0 do
dirs.Add(s.name);
i:=0;
while i<dirs.count do begin
if ((dirs[i]='..') or (dirs[i]='.')) then begin
dirs.Delete(i);
i:=i-1;
end else
if not directoryexists(sd+dirs[i]) then begin
dirs.Delete(i);
i:=i-1;
end;
inc(i);
end;
sysutils.findclose(s);
end;
function getfilesindir(const verzeichniss,filter:string;var files:tstringlist):extended;
var
sd:string;
s:tsearchrec;
i:integer;
e:extended;
flt:string;
begin
if filter='' then
flt:='*.*'
else
flt:=filter;
e:=0;
sd:=dirup(verzeichniss);
result:=0;
files:=tstringlist.Create;
if findfirst(sd+flt,faanyfile,s)<>0 then begin
sysutils.findclose(s);
exit;
end;
files.add(s.Name);
while findnext(s)=0 do begin
files.Add(s.name);
e:=e+s.Size;
end;
i:=0;
while i<files.count do begin
if ((files[i]='..') or (files[i]='.')) then begin
files.Delete(i);
i:=i-1;
end else
if directoryexists(sd+files[i]) then begin
files.Delete(i);
i:=i-1;
end;
inc(i);
end;
result:=e;
sysutils.findclose(s);
end;
function gettreeindir(const root:string;var files,dirs:tstringlist;filter:string):extended;
var
sd:string;
i,j:integer;
fls,unterverzeichnisse:tstringlist;
flt:string;
groesse:extended;
begin
groesse:=0;
if filter='' then
flt:='*.*'
else
flt:=filter;
sd:=dirup(root);
files:=tstringlist.Create;
dirs:=tstringlist.Create;
dirs.Add(sd);
i:=0;
while i<dirs.Count do begin
getdirsindir(dirs[i],unterverzeichnisse);
for j:=0 to unterverzeichnisse.Count-1 do
dirs.Add(dirup(dirs[i])+unterverzeichnisse.Strings[j]);
inc(i);
end;
for i:=0 to dirs.Count-1 do begin
groesse:=groesse+getfilesindir(dirs[i],flt,fls);
for j:=0 to fls.Count-1 do
files.Add(dirup(dirs[i])+fls.strings[j]);
end;
result:=groesse;
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates