Rubrik: Dateisystem · Dateien allgemein | VB-Versionen: VB5, VB6 | 21.12.07 |
Dateien und Verzeichnisse ohne Rekursion schnell einlesen In diesem Beispiel wird ein Weg gezeigt, mit dem Dateien und Verzeichnisse ohne Rekursion in ein Array einlesen kann. | ||
Autor: Rolf Wahlbrinck | Bewertung: | Views: 13.669 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
In diesem Beispiel wird ein Weg gezeigt, mit dem Dateien und Verzeichnisse ohne Rekursion in ein Array einlesen kann.
Hintergrund:
Ich wollte den Befehl FileCopy so verbessern, dass nur kopiert wird, wenn es nötig ist, wobei die StartDatei der Master sein sollte.
Wann ist es nötig:
- StartFile ist neu
- StartFile hat ein anderes Änderungsdatum als ZielFile
- StartFile hat eine andere Länge als ZielFile
Dateien die nur im Zielverzeichnis sind sollten dann gelöscht werden.
Hinweis: Aber nicht spiegeln - sonder Start ist der Master und Ziel der Slave.
All dies kann RoboCopy, aber die automatisch erzeugte DOS Oberfläche ist nicht mehr schön genug.
System:
Es werden zwei Felder aufgebaut:
- Feld 1 (das sind die Dateien)
Enhält eine Teilmenge von WIN32_FIND_DATA, der Dateiname ist aber hier vollständig, z.B. "C:\Autoexec.BAT"
- Feld 2 (das sind die Verzeichnisse)
Enhält alle Verzeichnisnamen inkl. dem "StartDir", z.B. "C:\Programme\"
ReDim DirFeld(100000) ' das müßte immer reichen ReDim FileFeld(1000000) ' das müßte immer reichen
Es wird in allen Unterverzeichnissen gesucht, die Suche ist aber nicht rekursiv!
Wie funktioniert das?
So geht's: Es gibt einen Zeiger in das DirFeld, der stets auf das Verzeichnis zeigt, welches gerade "abgearbeitet" wird.
In der Function 'FillVerzeichnisFeldVersionArray' wird nun dieses Verzeichnis durchsucht, wobei die Dateien an das FileFeld anghängt werden (inkl. Datum, Attribut etc.). Trifft die Function auf ein Verzeichnis, wird (und das ist der Trick) das DirFeld verlängert, der Zeiger ins Feld aber nicht verändert.
Das dynamische DirFeld wird abgearbeitet, bis der Zeiger die Feldgröße überschreitet.
Die Felder werden nun exakt dimensioniert (verkleinert).
Die Felder werden dann noch sortiert.. (wenn man will).
Achtung: Damit nicht C:\ABC\ABC.TXT vor C:\BCD.TXT kommt, kann man die Verzeichnisse mit Kleinbuchstaben und die Dateien mit Großbuchstaben schreiben.
Aufgrund des Umfangs wurde auf den Abdruck des vollständigen Source-Codes verzichtet.