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.612 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. |
sevZIP40 Pro DLL ![]() Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
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. |