Wenn man Zugriff auf eine Liste von Files haben will, entnommen bspw. aus einem Ordner und eventuell noch mittels Extension-Filter, erzeugt man zunächst eine Liste der entsprechenden Filenamen in einem Array. Das Array ist der Ausgangspunkt für das Sortieren der Filenamen in Bezug auf eine der Zeitangaben zum File wie LastAccessTime, LastWriteTime, CreationTime. Das Array liegt dann nach Anwendung der Funktion in sortierter Form vor. Ich stelle dazu auch eine Funktion zur Ermittlung der ursprünglichen File-Namenliste zur Verfügung: Hier die Funktion GetFiles: ''' <summary> ''' finden von Dateien rekursiv ''' </summary> ''' <param name="path">der zu durchsuchende Pfad</param> ''' <param name="searchPattern">der File-Filter nach Extension</param> ''' <param name="inclPath">suchen auch in Unterordnern</param> ''' <param name="uCase">die Filenamen nur als Großbuchstaben</param> ''' <returns>die String-Liste der Filenamen</returns> Public Function MyGetFiles(path As String, searchPattern As String, Optional inclPath As Boolean = True, Optional uCase As Boolean = False) As List(Of String) ' Aufruf ' Dim files As List(Of String) ' files = MyGetFiles("C:", "*.txt") Dim a As New List(Of String) Try ' finde Files Dim files() As String files = Directory.GetFiles(path, searchPattern) For Each file As String In files If uCase Then file = file.ToUpper() a.Add(file) Next Catch ex As Exception End Try Try ' durchsuche Unterordner Dim subfolders() As String, b As New List(Of String) subfolders = Directory.GetDirectories(path) ' durchsuchen von Unterordnern mit rekursivem Aufruf For Each subfolder As String In subfolders a.AddRange(MyGetFiles(subfolder, searchPattern)) Next Catch ex As Exception End Try If Not inclPath Then Dim i, idx As Short, t As String For i = 0 To a.Count - 1 t = a(i) idx = t.LastIndexOf("") + 1 t = t.Substring(idx) a(i) = t ' i += 1 Next End If ' return die gefundenen Files Return a End Function Beispiel des Aufrufs: Dim bakFiles() as String = GetFiles(bakPfad, "*.bak").ToArray wobei bakPfad den Ordner bezeichnet, der *.bak-Files enthält Danach wird das Sortieren aufgerufen. Hier jetzt der Code der Funktion SortFilesByDate: ''' <summary> ''' Enumeration der Datei-Zeiten ''' </summary> Public Enum EnumFileAttributes As Integer LastAccessTime LastWriteTime CreationTime End Enum ''' <summary> ''' Sortierung einer Datei-Namenliste, ''' wo die Namen mit komplettem Pfad in einem Array angegeben werden, ''' nach einer von 3 verschiedenen Zeitangaben. ''' Die Zeiten LastAccessTime, LastWriteTime und CreationTime stehen zur Verfügung. ''' Das Array wird nach einer von diesen 3 Zeiten sortiert. ''' </summary> ''' <param name="theFileArray">das zu sortierende Array mit den kompletten Pfaden der zu sortierenden Dateien</param> ''' <param name="theTime">die Zeit, nach der sortiert werden soll</param> ''' <param name="doReverse">soll das Array nach der Sortierung umgekehrt werden, true|false</param> ''' <param name="delPath">sollen im Array die Pfade beseitigt werden, true|false</param> Public Sub SortFilesByDate(theFileArray() As String, theTime As EnumFileAttributes, Optional doReverse As Boolean = False, Optional delPath As Boolean = False) Dim ArrLen As Short = theFileArray.Length - 1 Dim tmpValue, sp() As String, i As Short, flag As Boolean Select Case theTime Case EnumFileAttributes.CreationTime Do flag = True For i = 0 To ArrLen - 1 If File.GetCreationTime(theFileArray(i)) _ > File.GetCreationTime(theFileArray(i + 1)) Then TmpValue = theFileArray(i) theFileArray(i) = theFileArray(i + 1) theFileArray(i + 1) = TmpValue flag = False End If Next i Loop Until flag Case EnumFileAttributes.LastAccessTime Do flag = True For i = 0 To ArrLen - 1 If File.GetLastAccessTime(theFileArray(i)) _ > File.GetLastAccessTime(theFileArray(i + 1)) Then TmpValue = theFileArray(i) theFileArray(i) = theFileArray(i + 1) theFileArray(i + 1) = TmpValue flag = False End If Next i Loop Until flag Case EnumFileAttributes.LastWriteTime Do flag = True For i = 0 To ArrLen - 1 If File.GetLastWriteTime(theFileArray(i)) _ > File.GetLastWriteTime(theFileArray(i + 1)) Then TmpValue = theFileArray(i) theFileArray(i) = theFileArray(i + 1) theFileArray(i + 1) = TmpValue flag = False End If Next i Loop Until flag End Select If delPath Then ' Pfade löschen For i = 0 To ArrLen sp = Split(theFileArray(i), "") theFileArray(i) = sp(sp.Length - 1) Next End If If doReverse Then Array.Reverse(theFileArray) ' Feld umkehren End Sub Beispiel des Aufrufs: SortFilesByDate(bakFiles, EnumFileAttributes.LastWriteTime, True, True) Dieser Tipp wurde bereits 3.497 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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. |
sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats ![]() Dieter Otter sevTabStrip: Rechtsklick auf Reiter erkennen Eine Funktion, mit der sich prüfen lässt, auf welchen Tab-Reiter ein Mausklick erfolgte sevGraph (VB/VBA) ![]() Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
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. |