Dateinamen vergleichen zu langsam
-
Hallo an alle,
ich habe ein Problem. Ich habe ein Programm geschrieben, welches Dateien in einem Verzeichnis(root) mit Dateien in einem anderen Verzeichnis vergleicht. Wenn die Dateinamen gleich sind, werden beide Dateien in ein weiteres Verzeichnis verschoben.
Jetzt etwas genauer: Ich erstelle mit GetFileList eine Liste aller Dateinamen im rootverzeichnis. Jetzt erstelle ich eine zweite Liste des 2.Verzeichnises. Jetzt wird der erste Eintrag der root Liste mit allen anderen Dateinamen der zweiten Liste verglichen. Bei Übereinstimmung der Namen wird verschoben. Jetzt wird der zweite Eintrag der root Liste mit allen Einträgen der 2.Liste verglichen usw.
Da im root Verzeichnis etwa 12000 Dateien liegen und im 2.Verzeichnis etwas 8000 Dateien liegen dauert dieses Verfahren recht lange. Die 2 Liste wird zwar immer kleiner, da ich ja Dateien verschiebe, aber es dauert so einfach viel zu lange.
Kennt Ihr eine Lösung, wie ich diesen Vorgang schneller machen kann ???
Wäre für jeden Vorschlag dankbar.
Gruß
Borste
-
Wie sieht dein Vergleich denn aus? Sagt dir IndexOf etwas?
Bist du sicher, dass der Vergleich der Flaschenhals ist und nicht eher das Verschieben der Dateien?
-
Ich nehme mir die Namen(Items) der TList nacheinander vor und vergleiche die Items als ganzes miteinander.
Der Copyvorgang dauert nicht lange, da es sich nur um kleine Dateien handelt. In meinem Testlauf hat das Vergleichen von 4 Dateien mit den Namen der 2.Liste ca 10
in gedauert. Wenn ich das auf den ganzen vorgang hochrechne dann ....Was kann ich dann mit Index Of anstellen. Es nützt mir ja nichts, wenn ich den Platz eines Dateinamen in der Liste kenne, oder ?
Gruß Borste
-
Mit IndexOf kannst du prüfen, ob (und an welcher Stelle) der Suchstring (aus der ersten Liste) in der zweiten Liste vorkommt. Das scheint mir für dein Problem durchaus nützlich.
-
Das habe ich dann auch gleich mal getestet. WOW auf diese Idee bin ich noch gar nicht gekommen. Das funzt echt super und ist auch super schnell. Das werde ich morgen dann gleich mal mit allen Dateien testen.
Vielen Dank
Borste