Einzelnen Beitrag anzeigen

Willie1

Registriert seit: 28. Mai 2008
519 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: Dateien mit Pfad kopieren

  Alt 3. Jan 2021, 19:09
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!
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 ( 3. Jan 2021 um 19:37 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat