Hallo, zunächst vielen Dank für eure schnellen Antworten.
Mit TDirectory.Copy(src, dest) geht es, wenn man bei dest den Ordner anhängt. Es gibt keine
Exception, auch wenn der Zielordner nicht existiert.
Aber dann müsste es doch auch mit SHFileOperation klappen. Da gibt es Fortschrittsbalken, ich will sehr viele Bilder auf ein langsames Medium (SD) kopieren.
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
dir, pa, fi, s: string;
i: Integer;
begin
if SelectDirectory('Zielordner auswhlen','Computer',Dir,[sdNewUI,sdNewFolder]) then begin
Dir := IncludeTrailingPathDelimiter(Dir);
for i:=0 to NewList.Count - 1 do begin
s := ExcludeTrailingPathDelimiter(NewList.GetPath(i));
s := Copy(s, LastDelimiter('\', s)+1, MAXINT);
pa := Dir + s + '\';
fi := NewList.GetPathName(i);
CopyFiles(pa, fi ,false);
end;
end;
end;
Delphi-Quellcode:
function CopyFiles(DestFolder: string; const Files: array of string; WithConfirm: Boolean;
Move: Boolean=false): Boolean;
var
SHFOS: TSHFileOpStruct;
i: Integer;
s: string;
begin
s:='';
for i:=Low(Files) to High(Files) do s:=s + Files[i] + #0;
s:=s + #0;
with SHFOS do begin
Wnd:=0;
if Move then wFunc:=FO_MOVE else wFunc:=FO_COPY;
pFrom:=PChar(s);
pTo:=PChar(DestFolder);
fFlags:=FOF_NOCONFIRMATION; //ohne Rückfrage
if WithConfirm then fFlags:=0;
fAnyOperationsAborted:=false;
hNameMappings:=nil;
end;
Result:=(ShFileOperation(SHFOS) = 0) and (SHFOS.fAnyOperationsAborted = LongBool(false));
end; {CopyFiles}
Willie.
Nachtrag: Wenn ich das Kopieren des Ordner mit dem Explorer ausführe, geht es doch auch!