Rubrik: Dateisystem · Dateien allgemein | VB-Versionen: VB4, VB5, VB6 | 26.04.02 |
Dateiliste sortiert nach Datum / Zeit Dieses Beispiel zeigt, wie sich eine Liste aller Dateien eines Ordners - sortiert nach Datum/Zeit - erstellen lässt. | ||
Autor: Dieter Otter | Bewertung: | Views: 32.122 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Das Ermitteln aller Dateien eines Ordners lässt sich sehr einfach über die VB-eigene Funktion Dir erledigen. Jedoch sind die ermittelten Dateien immer alphabetisch sortiert. Wie sieht es aber aus, wenn die Dateien nach Datum / Uhrzeit sortiert angezeigt werden sollen?
Wir behelfen uns eines kleinen Tricks
Wir ermitteln nicht nur den Dateinamen, sondern auch die Datum-/Zeitangabe. Hierfür stellt uns VB die Funktion FileDateTime zur Verfügung. Weiterhin fügen wir die ermittelten Dateien nicht sofort in die Liste, sondern speichern diese zunächst in ein Array-Feld. Dieses lässt sich dann später sehr schnell mit dem QuickSort-Algorithmus sortieren. Und wenn wir jetzt vor jedem Eintrag zunächst das Datum stellen - und zwar im Format "yyyymmdd hhnnss", so sortiert uns QuickSort unsere Dateiliste automatisch nach Datum/Zeit.
Und genau das wollten wir ja auch erreichen!
Dim sFile As String Dim sPath As String Dim sFileDate As Variant Dim lMax As Long Dim lCount As Long ReDim aFiles(1 To 1) As String ' Pfad (Verzeichnis) sPath = "d:\temp\" ' Array: aktuelle Größe der Dimension lMax = UBound(aFiles) ' alle Dateien im angegebenen Ordner ermitteln sFile = Dir$(sPath & "*.*") While sFile <> "" If sFile <> "." And sFile <> ".." Then ' Dateizeit ermitteln sFileDate = FileDateTime(sPath & sFile) ' Array dynamisch vergrößern ' siehe Tipps & Tricks lCount = lCount + 1 If lCount > lMax Then lMax = lCount * 2 ReDim Preserve aFiles(1 To lMax) End If ' wir stellen dem Dateinamen die Zeitangabe voran, ' so daß die spätere Sortierung via QuickSort ' die Dateien nach Datum sortiert aFiles(lCount) = Format$(sFileDate, _ "yyyymmdd hhnnss") & sFile End If sFile = Dir$ Wend ' Array: überflüssigen Speicher freigeben lMax = lCount ReDim Preserve aFiles(1 To lMax) ' Array via Quicksort sortieren QuickSort aFiles() ' sortierte Anzeige der Dateien in einer ListBox ' (nach Datum sortiert - wohlgemerkt ;-)) For lCount = lMax To 1 Step -1 List1.AddItem Mid$(aFiles(lCount), 16) Next lCount
Die "Übertragung" des sortierten Arrays erfolgt rückwärts, so daß in der Liste die Datei mit dem neuesten Datum ganz oben steht.
Den Code für den QuickSort-Algorithmus finden Sie hier:
QuickSort in VB