AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Ordner kopieren

Offene Frage von "Henry"
Ein Thema von Henry · begonnen am 10. Okt 2004 · letzter Beitrag vom 13. Mai 2005
Antwort Antwort
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#1

Re: Frage zu Ordner kopieren

  Alt 5. Apr 2005, 12:02
Ich hatte mir mal eine eigene Procedure geschrieben, die bisher bei mir immer funktioniert hat:
Delphi-Quellcode:
Procedure CopyDir(DirPath,NewPath: String; Cut:Boolean);
  Procedure FindDirs(DirPath: String; StringList:TStrings; Recurse: Boolean = false);
  var SR:TSearchRec;
  begin
    if AnsiLastChar(DirPath)^ <> '\'
    then DirPath:=DirPath + '\';
    // Ordner suchen
    try
    if FindFirst(DirPath+'*.*',faDirectory,SR)=0 then
    repeat
    if ((SR.Attr and faDirectory)<>0) and (SR.Name <> '.') and (SR.Name <> '..')
    then begin
    StringList.Add(DirPath+SR.Name+'\');
    if Recurse
    then FindDirs(DirPath+SR.Name,StringList,true);
    end;
    until FindNext(SR) <> 0;
    finally
    FindClose(SR);
    end;
  end;
var SR:TSearchRec; i,MainDirIndex:integer; TargetDir: String; List1,List2:TStringList;
begin
  List1:=TStringList.Create;
  List2:=TStringList.Create;
  try
  if AnsiLastChar(DirPath)^ <> '\'
  then DirPath:=DirPath + '\';
  if AnsiLastChar(NewPath)^ <> '\'
  then NewPath:=NewPath + '\';

  List2.Add(DirPath);
  FindDirs(DirPath,List2,true); // true = Recursive
  // alle Dateien suchen
  for i:=0 to List2.Count-1 do
  if FindFirst(List2.Strings[i]+'*.*',faAnyFile,SR)=0 then
  try
  repeat
  if SR.Attr and faDirectory <> faDirectory
  then List1.Add(List2.Strings[i]+SR.Name);
  until FindNext(SR)<>0;
  finally
  FindClose(SR);
  end;
  // Ordner erstellen
  for i:=0 to List2.Count-1 do begin
  TargetDir:=ExtractFilePath(List2.Strings[i]);
  MainDirIndex:=pos(GetOnlyFolderName(DirPath),TargetDir)-1;
  delete(TargetDir,1,MainDirIndex);
  CreateDir(NewPath+TargetDir);
  end;
  // Dateien in ihre zugehörigen Ordner kopieren
  for i:=0 to List1.Count-1 do begin
  TargetDir:=ExtractFilePath(List1.Strings[i]);
  MainDirIndex:=pos(GetOnlyFolderName(DirPath),TargetDir)-1;
  delete(TargetDir,1,MainDirIndex);
  if copyfile(PChar(List1.Strings[i]),PChar(NewPath+TargetDir+ExtractFileName(List1.Strings[i])),false)
  then begin
  if Cut then deletefile(List1.Strings[i])
  end else showmessage('Die Datei '+List1.Strings[i]+' konnte nicht kopiert werden !');
  end;
  if Cut then DelTree(DirPath);
  finally
  List1.Free;
  List2.Free;
  end;
end;
Rekursives Kopieren ist hier bei standardmäßig eingestellt. Wenn du es benutzerdefiniert haben möchtest, musst du bei meinem Kommentar "// true = Recursive" ne Variable einsetzen und diese oben in die Procedure hinzufügen (aber weißte ja sicher).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 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-2025 by Thomas Breitkreuz