Re: Frage zu Ordner kopieren
Moin Henry,
nicht dass ich wüsste. Es gab, vor Jahren, mal eine Übersetzung der Win 32 API Doku (drei dicke Bücher), aber die dürfte nicht mal mehr Ansatzweise aktuell sein. |
Re: Frage zu Ordner kopieren
Hallo,
ich habe mir gerade mal in der SDK die möglichen Parameter für fFlags herausgesucht. Leider ist keiner dabei der mir so erscheint das er mein Problem lösen könnte. Zitat:
Gibt es noch eine Möglichkeit wie man Verzeichnisse kopieren kann? Danke schon einmal |
Re: Frage zu Ordner kopieren
Hallo,
ich würde die Frage gern noch einmal aufbringen. Habe bis jetzt leider noch nicht herausfinden können was ich an der Funktion (erster Beitrag) ändern müßte um mein Verzeichnis komplett auf eine Diskette sichern zu können. Vieleicht weis ja doch jemand noch wie man sie anpassen kann. Danke |
Re: Frage zu Ordner kopieren
Ich hatte mir mal eine eigene Procedure geschrieben, die bisher bei mir immer funktioniert hat:
Delphi-Quellcode:
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).
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; |
Re: Frage zu Ordner kopieren
Zitat:
|
Re: Frage zu Ordner kopieren
Moin Nogge,
Deine Methode hat nur den Nachteil, dass bei CopyFile die Sicherheitsattribute der Dateien nicht mitkopiert werden. |
Re: Frage zu Ordner kopieren
Danke euch.
ich werde die Procedure bei Gelegenheit mal ausprobieren. In diesem Fall haben die Dateien auch keine Sicherheitsatribute die mit kopiert werden müßten. Ich werde dann hier bekanntgeben ob es funktioniert hat oder nicht. |
Re: Frage zu Ordner kopieren
Müßen für die Procedure noch bestimmte Units eingebunden werden?
Ich bekomme bei GetOnlyFolderName eine Fehlermeldung und in der Hilfe habe ich den Befehl nicht gefunden |
Re: Frage zu Ordner kopieren
Ja, das ist auch noch ne Function von mir...sry, dass ich die vergessen habe:
Delphi-Quellcode:
Diese Function braucht die Uses "JclStrings". Kp, ob es bereits einen einfacheren Befehl gibt, aber dieser (=> GetOnlyFolderName) funktioniert auf jeden Fall.
Function GetOnlyFolderName(Dir: String; PathFolders: Cardinal = 1; SlashAtBack: Boolean = false): String;
var INDEXslash: Integer; BSlash_Count:Cardinal; begin if AnsiLastChar(Dir)^ = '\' then delete(Dir,Length(Dir),1); BSlash_Count:=StrCharCount(Dir,'\'); //JclStrings while BSlash_Count>PathFolders do begin // prüfen, ob mehr als x \ im String vorhanden sind INDEXslash:=pos('\',Dir); // Position des \ bestimmen delete(Dir,INDEXslash,1); // Den \ löschen end; if BSlash_Count<=PathFolders then begin // prüfen, ob genau 1 \ im String vorhanden ist INDEXslash:=pos('\',Dir); // Position des (jetzt nur noch einem einzigen) \ bestimmen delete(Dir,1,INDEXslash); // Den String vom Indexwert 1 bis incl. dem \ löschen end; if SlashAtBack then Dir:=Dir+'\'; result:=Dir; end; |
Re: Frage zu Ordner kopieren
Danke, als nächstes hängt es an DelTree. Ebenfalls nicht in der Hilfe gefunden
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 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