Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Dateien mit Pfad kopieren

  Alt 11. Jan 2021, 08:43
Bin etwas verwirrt gerade was dieses Thema angeht, also korrigiert mich wenn ich jetzt falsch liege.
Es soll doch Ordner X mit allen Unterordnern an einen neuen Ort kopiert werden (Durch beibehalten aller Dateinamen und (Unter-)Ordnernamen bleibt dann die Struktur auch erhalten, richtig?

In Lazarus mache ich das aktuell so (nicht vom Widestring irritieren lassen):
copydir(Source, Destination);
Delphi-Quellcode:
//Verzeichnis kopieren
function CopyDir(SourceDirectory: WideString; DestinationDirectory: WideString): boolean;
var
  SHFileOpStruct: TSHFileOpStruct;
  SourceBuffer, DestinationBuffer: array[0..255] of char;
  res: integer;
begin
  try
    if not SysUtils.DirectoryExists(SourceDirectory) then
    begin
      Result := False;
      exit;
    end;
    Fillchar(SHFileOpStruct, sizeof(SHFileOpStruct), 0);
    FillChar(SourceBuffer, sizeof(SourceBuffer), 0);
    FillChar(DestinationBuffer, sizeof(DestinationBuffer), 0);
    StrPCopy(SourceBuffer, String(SourceDirectory));
    StrPCopy(DestinationBuffer, String(DestinationDirectory));
    with SHFileOpStruct do
    begin
      Wnd := 0;
      wFunc := FO_COPY;
      pFrom := @SourceBuffer;
      pTo := @DestinationBuffer;
      fFlags := FOF_ALLOWUNDO;
      hNameMappings := nil;
      lpszProgressTitle := nil;

      fFlags := fFlags or FOF_NOCONFIRMATION;
      fFlags := fFlags or FOF_SILENT;
      fFlags := fFlags or FOF_SIMPLEPROGRESS;
      fFlags := fFlags or FOF_NOCONFIRMMKDIR;
    end;
    res := SHFileOperation(SHFileOpStruct);
    Result := (res = 0);

    if not Result then
    begin
      ShowMessage(SysErrorMessage(GetLastError));
    end;
  except
    Result := False;
  end;
end;
Das funktioniert einwandfrei bisher.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat