Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Verzeichnis kopieren... (https://www.delphipraxis.net/107218-verzeichnis-kopieren.html)

Ares 24. Jan 2008 11:37


Verzeichnis kopieren...
 
Hallo!

Wie kann ich mit Delphi ein komplettes Verzeichnis mit allen Dateien und Unterordnern in ein anderes Verzeichnis kopieren?

Ich habe es wie folgt versucht, dies hat aber nicht funktioniert:

Delphi-Quellcode:
  function CopyDirectory(SourceDirectory: string;
    DestinationDirectory: string): boolean;
  var
    SHFileOpStruct: TSHFileOpStruct;
    SourceBuffer, DestinationBuffer: array[0..255] of char;
    res: integer;
  begin
    try
      if not 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, SourceDirectory);
      StrPCopy(DestinationBuffer, 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
        ShowMessage(SysErrorMessage(GetLastError));
    except
      Result := False;
    end;
  end;
Der Aufruf von CopyDirectory('C:\test\', 'D:\Ziel\') liefert zwar das Ergebnis 2 = Vorgang erfolgreich ausgeführt, aber es werden keine Dateien order Order kopiert... Was mache ich falsch?

Gibt es ggf. einen einfacheren Weg einen Ordner von A nach B zu kopieren?

Das ganze soll ohne Fortschrittsbalken, etc. ablaufen.

Besten Dank
Ares

DeddyH 24. Jan 2008 11:42

Re: Verzeichnis kopieren...
 
Bist Du sicher, dass 2 Erfolg bedeutet? AFAIK ist das ERROR_PATH_NOT_FOUND, bin mir da aber nicht ganz sicher (kann auch gerade nicht nachsehen).

Aurelius 24. Jan 2008 11:46

Re: Verzeichnis kopieren...
 
Dazu gibts doch http://msdn2.microsoft.com/en-us/library/ms127957.aspx

Bist du dir sicher dass es den Ordner C:\test bei dir auch gibt?

soulies 24. Jan 2008 11:48

Re: Verzeichnis kopieren...
 
hoi,

lass mal bei den pfadangaben den letzten backslash weg ...

dann funkst bei mir



cya

Ares 24. Jan 2008 12:47

Re: Verzeichnis kopieren...
 
Zitat:

Zitat von soulies
lass mal bei den pfadangaben den letzten backslash weg ...
dann funkst bei mir

Besten Dank, jetzt klappt es bei mir auch. Allerdings werden die Unterordner nicht mit kopiert. Kann man SHFileOperation hierfür irgendwie erweitern? Oder muss ich jeden Ordner einzeln übergeben?

DeddyH 24. Jan 2008 13:01

Re: Verzeichnis kopieren...
 
Schau Dir die Flags von SHFileOpStruct noch einmal genau an. Wenn ich das richtig verstanden habe, fehlt da noch ein FOF_MULTIDESTFILES.

Hawkeye219 24. Jan 2008 13:35

Re: Verzeichnis kopieren...
 
Hallo Ares,

das Problem könnte durch fehlende wildcards verursacht werden: klick

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz