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

user profile iconAddy88 hat folgendes geschrieben Zum zitierten Posting springen:
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