Entwickler-Ecke
Dateizugriff - Verzeichnisse mit Unterverzeichnissen kopieren mit exclude
Addy88 - Mi 23.11.11 23:13
Titel: Verzeichnisse mit Unterverzeichnissen kopieren mit exclude
Hallo zusammen,
da man ja in Zeiten der Modernen Technik immer fauler wird, wollte ich ein Vorhandenes Ant Script in Delphi umsetzen um eine etwas bedienerfreundlichere GUI zu bekommen.
Problem ist, ich hab keine Ahnung wie ich das angehen soll, nach langem googlen bin ich nämlich nicht wirklich schlauer. Alle Ergebnisse drehen sich immer nur um das kopieren kompletter Verzeichnisse.
Hier mal das Beispiel wie es in Ant aussieht:
<if>
<available file="${local.path}/${project}/installer/v${valt}" type="dir"/>
<then>
<copy todir="${local.path}/${project}/installer/v${vneu}" preservelastmodified="true" overwrite="true">
<fileset dir="${local.path}/${project}/installer/v${valt}">
<exclude name="BO/application/boserver/*.*"/>
<exclude name="POS/application/pos/*.*"/>
<exclude name="updatepakete/**"/>
</fileset>
</copy>
</if>
Nun hätte ich das gerne irgendwie in Delphi umgesetzt, für Ratschläge wäre ich sehr dankbar.
jaenicke - Do 24.11.11 12:14
Suche alle passenden Dateien mit FindFirst..FindNext (wie findest du z.B. in unserer Library), dann prüfe, ob sie die Bedingungen erfüllen und werfe alle unpassenden wieder aus der Liste oder schreibe sie gar nicht erst hinein.
Danach kopiere alle Dateien auf der Liste.
Der Inhalt des Skripts sieht ja so aus als ob du in der selben Branche arbeitest. :mrgreen:
Addy88 - Do 24.11.11 12:54
Hi, also den Ansatz hatte ich auch schon, Sache ist aber ich müsste dann quasi erstmal alle Dateien in dem Verzeichnis "${local.path}/${project}/installer/v${valt}" auslesen, in eine temporäre Datei schreiben und dann aus dieser wieder alle Einträge mit meinetwegen *.bz2 rausnehmen?! Geht das nicht irgendwie einfacher?
Bzw. gibt es da nicht vielleicht schon Api's oder ähnliches welche ein copy mit exclude unterstützen?
Ja Retail Branche, ich hoffe der Chef bekommt nicht mit das ich mit dem "Feind" kommuniziere :D
jaenicke - Do 24.11.11 13:57
Addy88 hat folgendes geschrieben : |
| Hi, also den Ansatz hatte ich auch schon, Sache ist aber ich müsste dann quasi erstmal alle Dateien in dem Verzeichnis "${local.path}/${project}/installer/v${valt}" auslesen, in eine temporäre Datei schreiben und dann aus dieser wieder alle Einträge mit meinetwegen *.bz2 rausnehmen?! |
Warum? :gruebel:
Das alles passiert mit der reinen Dateiliste im Speicher und
danach wird erst kopiert, wenn die Liste nur die gewünschten Einträge enthält.
Addy88 - Do 24.11.11 15:37
Dann hab ich gerade ein Verständniss Problem wie ich da bestimmte Dateitypen bzw. Verzeichnisse nicht mit in die Dateiliste übergebe. Und eine ganz wichtige Sache, wird während des Kopiervorgangs die Verzeichnisstruktur beibehalten oder werden die kopierten Dateien dann einfach plain in das target.dir gelegt?
jaenicke - Do 24.11.11 23:10
Ich habe eine entsprechende Funktion einmal allgemeingültig erstellt und in die Library gepackt:
http://www.delphi-library.de/viewtopic.php?p=654795
Du kannst dort eine oder mehrere Masken (kommasepariert) angeben, ebenso wie eine oder mehrere Masken zum Ausschließen von Dateien. (Außerdem gibt es noch weitere Optionen.)
Die resultierende Dateiliste kannst du dann 1:1 zum Kopieren benutzen, wobei die relativen Pfadangaben mit enthalten sind und ebenfalls benutzt werden können um die Zielverzeichnisse ggf. anzulegen.
Addy88 - Fr 25.11.11 17:24
Hi Sebastian, vielen vielen Dank! Da wäre ich selbst nie hin gekommen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!