vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  13.647 
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.

Dieser Tipp wurde bereits 13.647 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel