![]() |
Ordner kopieren
Hallo,
Ich würde gerne wissen, ob es einen Befehl gibt, der einen bestimmten Ordner auf eine andere Partition oder auch in einen anderen Ordner KOPIERT. Der alte Ordner soltte trotzdem noch vorhanden sein. Ich brauche den Befehl, für ein Sicherungsprogramm, dass regelmäßig verschiedene Ordner wo anders hinkopiert. Deshalb wäre es gut, wenn gleiche Dateien ersetzt würden. Also ich bezweifele zwar, das es so einen Befehl gibt, aber fragen wollte ich trotzdem mal. :wink: |
Re: Ordner kopieren
Gibt es. Die [dp="Ordner kopieren"]Suche[/dp] hilft:
![]() |
Re: Ordner kopieren
SHFileOperation is aber nicht so gut, weil es die Windows Shell als Zwischenstufe verwendet (wie der Explorer).
eventuell dürften dir diese Funktionen weiterhelfen:
Delphi-Quellcode:
dann mit forcedirectories Verzeichnisse erstellen und mit copyfile die Dateien kopieren.
procedure getdirsindir(const verzeichniss:string;var dirs:tstringlist);
var sd:string; s:tsearchrec; i:integer; begin dirs:=tstringlist.Create; sd:=dirup(verzeichniss); if findfirst(sd+'*.*',faanyfile,s)<>0 then begin sysutils.findclose(s); exit; end; dirs.add(s.Name); while findnext(s)=0 do dirs.Add(s.name); i:=0; while i<dirs.count do begin if ((dirs[i]='..') or (dirs[i]='.')) then begin dirs.Delete(i); i:=i-1; end else if not directoryexists(sd+dirs[i]) then begin dirs.Delete(i); i:=i-1; end; inc(i); end; sysutils.findclose(s); end; function getfilesindir(const verzeichniss,filter:string;var files:tstringlist):extended; var sd:string; s:tsearchrec; i:integer; e:extended; flt:string; begin if filter='' then flt:='*.*' else flt:=filter; e:=0; sd:=dirup(verzeichniss); result:=0; files:=tstringlist.Create; if findfirst(sd+flt,faanyfile,s)<>0 then begin sysutils.findclose(s); exit; end; files.add(s.Name); while findnext(s)=0 do begin files.Add(s.name); e:=e+s.Size; end; i:=0; while i<files.count do begin if ((files[i]='..') or (files[i]='.')) then begin files.Delete(i); i:=i-1; end else if directoryexists(sd+files[i]) then begin files.Delete(i); i:=i-1; end; inc(i); end; result:=e; sysutils.findclose(s); end; function gettreeindir(const root:string;var files,dirs:tstringlist;filter:string):extended; var sd:string; i,j:integer; fls,unterverzeichnisse:tstringlist; flt:string; groesse:extended; begin groesse:=0; if filter='' then flt:='*.*' else flt:=filter; sd:=dirup(root); files:=tstringlist.Create; dirs:=tstringlist.Create; dirs.Add(sd); i:=0; while i<dirs.Count do begin getdirsindir(dirs[i],unterverzeichnisse); for j:=0 to unterverzeichnisse.Count-1 do dirs.Add(dirup(dirs[i])+unterverzeichnisse.Strings[j]); inc(i); end; for i:=0 to dirs.Count-1 do begin groesse:=groesse+getfilesindir(dirs[i],flt,fls); for j:=0 to fls.Count-1 do files.Add(dirup(dirs[i])+fls.strings[j]); end; result:=groesse; end; |
Re: Ordner kopieren
Und warum ist das nicht gut? Guck mal, wa du da jetzt an Code produziert hast. Mit der API Funktion reduziert sich das auf 10 bis 15 Zeilen.
|
Re: Ordner kopieren
Zitat:
|
Re: Ordner kopieren
Danke für die Tipps bisher. Aber ich wäre auch lieber für 10 - 15 Zeilen als dieses Monster Programm. Da muss man sich erst mal zurechtfinden :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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