Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Inhalt eines Ordners kopieren? (https://www.delphipraxis.net/137543-inhalt-eines-ordners-kopieren.html)

PeterPanino 23. Jul 2009 00:30


Inhalt eines Ordners kopieren?
 
So, ich habe jetzt wirklich lange gesucht und nichts gefunden.

Ich möchte den gesamten INHALT eines Ordners A (inkl. Dateien und Unterordnern) in einen anderen Ordner B kopieren, am besten mit ShFileOperation und womöglich mit mehreren Dateimasken aufeinmal.

Alles, was ich darüber gefunden habe war, wie man eine eine einzelne Datei oder einen einzelnen Ordner kopiert, aber nicht den INHALT eines Ordners.

Ich kann es nicht glauben, dass es dafür keinen einfachen Shell-Befehl geben soll! Muss ich wirklich jede einzelne Datei und jeden Unterordner im Quellordner abklappern und jede einzelne Datei und jeden Unterordner einzeln kopieren??

Mit dieser Funktion werden lediglich die DATEIEN im Wurzelverzeichnis des Quellordners kopiert, aber nicht die UNTERORDNER des Quellordners:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyDir('F:\Quellordner\*', 'F:\Zielordner');
end;

function TForm1.CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY or FOF_SIMPLEPROGRESS or FOF_MULTIDESTFILES;
    pFrom := PChar(fromDir + #0);
    pTo   := PChar(toDir);
  end;
  Result := (0 = ShFileOperation(fos));
end;

sx2008 23. Jul 2009 01:55

Re: Ordner-INHALT in einen anderen Ordner kopieren?
 
Zitat:

Zitat von PeterPanino
Mit dieser Funktion werden lediglich die DATEIEN im Wurzelverzeichnis des Quellordners kopiert, aber nicht die UNTERORDNER des Quellordners

Das übliche Tomaten-auf-den-Augen-Syndrom :zwinker:
Was könnte das Flag FOF_FILESONLY bewirken?

PeterPanino 23. Jul 2009 01:58

Re: Ordner-INHALT in einen anderen Ordner kopieren?
 
Zitat:

Zitat von sx2008
Zitat:

Zitat von PeterPanino
Mit dieser Funktion werden lediglich die DATEIEN im Wurzelverzeichnis des Quellordners kopiert, aber nicht die UNTERORDNER des Quellordners

Das übliche Tomaten-auf-den-Augen-Syndrom :zwinker:
Was könnte das Flag FOF_FILESONLY bewirken?

Das muss Telepathie gewesen sein, ich habe das Posting gelöscht, BEVOR ich deine Antwort gelesen habe! Danke jedenfalls! Ja, das muss eine ganze Ladung Tomaten gewesen sein!

PeterPanino 23. Jul 2009 02:09

Re: Inhalt eines Ordners kopieren?
 
Ich habe die Löschung des Postings rückgängig gemacht, da ich mich wegen der Tomaten auf den Augen ruhig schämen soll! :wall: :wall: :wall:

Aber noch eine andere Frage: Ich habe bei ShFileOperation keine Möglichkeit gefunden, mehrere Dateimasken aufeinmal einzubinden. Bleibt mir dann nichts anderes übrig, als die die ganze Funktion für jede Dateimaske zu wiederholen?

PeterPanino 23. Jul 2009 02:28

Re: Inhalt eines Ordners kopieren?
 
Mhmm, apropos Dateimasken, habe ich jetzt probiert und funktioniert nicht: Wenn ich die Funktion so aufrufe:

Delphi-Quellcode:
CopyDir('F:\Quellordner\*.lnk', 'F:\Zielordner');
dann werden wieder nur die Dateien im Wurzelverzeichnis (und keine Unterordner) kopiert!

Wie kann man also Wildcards einbinden?

PeterPanino 23. Jul 2009 03:00

Re: Inhalt eines Ordners kopieren?
 
Zusätzliche Frage: Kann es sein, dass die Funktion ShFileOperation zurückkehrt, bevor die tatsächliche Arbeit abgeschlossen ist? Denn wenn ich es richtig verstanden habe, wird ja eine externe Shell-Funktion aufgerufen (angestoßen?) und möglicherweise nicht gewartet, bis diese beendet ist?

jaenicke 23. Jul 2009 04:44

Re: Inhalt eines Ordners kopieren?
 
Zitat:

Zitat von PeterPanino
Zusätzliche Frage: Kann es sein, dass die Funktion ShFileOperation zurückkehrt, bevor die tatsächliche Arbeit abgeschlossen ist?

Nein, dem ist nicht so, der Erfolg wird ja über den Rückgabewert angezeigt, das ginge dann wohl schlecht. ;-)

Und generell und auch für die andere Frage:
Dir ist offenbar nicht klar, was die Flags eigentlich bedeuten. Das ist schlecht...
Wie wäre es, wenn du (wenn du die Bedeutung des Flags nicht am Namen siehst) in der Dokumentation nachschaust?
Zitat:

FOF_MULTIDESTFILES
The pTo member specifies multiple destination files (one for each source file in pFrom) rather than one directory where all source files are to be deposited.
Wie das mit Wildcards aussieht, weiß ich nicht.

PeterPanino 23. Jul 2009 08:34

Re: Inhalt eines Ordners kopieren?
 
Zitat:

Zitat von jaenicke
Dir ist offenbar nicht klar, was die Flags eigentlich bedeuten. Das ist schlecht...

War ein Schnellschuss aus der Clipboard-Hüfte ;-), manchmal verrennt man sich in etwas ... Danke jedenfalls für den Hinweis zur Dokumentation!

PeterPanino 23. Jul 2009 09:36

Re: Inhalt eines Ordners kopieren?
 
Wenn ich FOF_NO_UI (don't display any UI at all) verwende, gibt es offenbar kein Flag oder eine andere Möglichkeit, das Überschreiben von schreibgeschützten Dateien zu verhindern?

TBx 23. Jul 2009 09:59

Re: Inhalt eines Ordners kopieren?
 
:warn: @TE: Unterlass bitte das Pushen :warn:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.
Seite 1 von 2  1 2      

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