SHFileOperation is aber nicht so gut, weil es die Windows Shell als Zwischenstufe verwendet (wie der Explorer).
eventuell dürften dir diese Funktionen weiterhelfen:
Delphi-Quellcode:
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;
dann mit forcedirectories Verzeichnisse erstellen und mit copyfile die Dateien kopieren.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates