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 Dateien und Unterordner von einem Ordner in anderen Ordner K (https://www.delphipraxis.net/100597-dateien-und-unterordner-von-einem-ordner-anderen-ordner-k.html)

renekr 1. Okt 2007 09:40


Dateien und Unterordner von einem Ordner in anderen Ordner K
 
Hallo,

Ich habe folgendes vor:

Ich will die Unterordner und Files und alles darunter liegende von einem Ordner in einen anderen Ordner kopieren.

Leider habe ich es nur geschafft einen Root Folder in einen anderen Ordner zu Kopieren,allerdings habe ich dann den Root Folder noch unter dem Ordner,das will ich aber so nicht.


Die funktion nehme ich dazu:
Delphi-Quellcode:
function CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom := PChar(fromDir + #0);
    pTo   := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;
Hat jemand etwas besseres auf Lager?

Vielen Dank.

alleinherrscher 1. Okt 2007 10:09

Re: Dateien und Unterordner von einem Ordner in anderen Ordn
 
Hi!

Ist jetzt mal ins unreine geschrieben, sollte aber mit evtl. kleinen Änderungen funktionieren. Der Trick besteht daran, dass man die CopyDirectory procedure rekursiv aufruft, wenn FindFirst einen Ordner findet.

Delphi-Quellcode:
procedure CopyDirectory(aDirectory,aDestinationDirectory:String);
var
LStrList: TStringlist;
LSearchRec: TSearchRec;
begin

if FindFirst(aDirectory + '*.*', faAnyFile, LSearchRec) = 0 then
  begin
   
  repeat

    //Ordner auflisten

    if LSearchRec.Attr and faDirectory = faDirectory then
      if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
           begin
              CopyDirectory(aDirectory+LSearchRec.Name+'\',aDestinationDirectory+LSearchRec.Name+'\');
           end;

    //Dateien auflisten

    if LSearchRec.Attr and faDirectory = 0 then
     begin
       Copyfile(PChar(aDirectory+LSearchRec.Name),PChar(aDestinationDirectory+LSearchRec.Name),true);
     end;

   until FindNext(LSearchRec) <> 0;
   
   FindClose(LSearchRec);
  end;
end;

peschai 1. Okt 2007 10:16

Re: Dateien und Unterordner von einem Ordner in anderen Ordn
 
Hallo,
Kleiner Hinweis: Bitte bei den Verzeichnis-verkettungen fehlt der '\' dazwischen ... z.B.
Delphi-Quellcode:
...aDirectory+LSearchRec.Name+'\'...
Delphi-Quellcode:
...aDirectory+'\'+LSearchRec.Name+'\'...

Progman 1. Okt 2007 10:28

Re: Dateien und Unterordner von einem Ordner in anderen Ordn
 
versuch das mal:
Delphi-Quellcode:
var
  shellinfo: TSHFILEOPSTRUCT;

procedure CopyVerzeichnis(Source, Dest);
var files : string;
     Abbruch: Boolean;
begin
  files :=Source + #0;
  files := files + #0;
  with shellinfo do begin
     wnd    := Application.handle;
     wfunc  := FO_COPY;
     pFrom  := PChar(files);
     pTo    := PChar(Dest);
  end;
  if SHFileOperation(shellinfo)=S_Ok then
   ShowMessage('Alle Dateien wurden kopiert!')
  else
   ShowMessage('Die Dateien wurden nicht oder nicht vollständig kopiert!');
end;
Anstelle von Application.Handle solltest du besser das Handle deines Forms nehmen, so hatte ich das jedenfalls gemacht.

Hansa 1. Okt 2007 10:42

Re: Dateien und Unterordner von einem Ordner in anderen Ordn
 
Warum nicht einfach mit ShellExecute und xcopy ? Oder soll ein bereits vorhandener Windows-Befehl mit Delphi nachprogrammiert werden ? :shock:

Hawkeye219 1. Okt 2007 10:42

Re: Dateien und Unterordner von einem Ordner in anderen Ordn
 
Hallo Rene,

versuche es einmal so:

Delphi-Quellcode:

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

procedure TForm1.Button1Click (Sender: TObject);
begin
  CopyFiles ('C:\Source\*.*', 'C:\Target');
end;
Beachte die Wildcards bei der Angabe der Quelldaten.

Gruß Hawkeye

renekr 1. Okt 2007 10:47

Re: Dateien und Unterordner von einem Ordner in anderen Ordn
 
Hi @,
WOW so viel Resonanz.
Vielen 'Dank.

Ich habe derzeit ein bisschen experimentiert und folgendes programmeirt.

Delphi-Quellcode:
function CopyDir_without_Root(const fromDir, toDir: string): Boolean;
var
fo: TSHFileOpStruct;
buffer : array[0..4096] of char;
p      : pchar;
begin
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
StrECopy(p,Pchar( fromDir+'\*.*')); //this is folder that you want to copy
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd   := form1.Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo   := PChar(toDir); //this is where the folder will go Fo.fFlags := 0;

Result := (0 = ShFileOperation(fo));
end;
Das ist fast ähnlich wie das letzte Posting.

Vielen Lieben Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.

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