vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB5, VB621.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 WahlbrinckBewertung:  Views:  13.669 
ohne HomepageSystem:  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.



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.