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.311 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 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. |
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! Tipp des Monats Oktober 2024 Heinz Prelle Firewall-Status unter WinXP/Vista prüfen Das Beispiel prüft, ob die Firewall unter Windows XP/Vista eingeschaltet ist oder nicht. Zudem wird eine Abfrage durchgeführt ob es sich bei dem zugrundeliegenden Betriebssystem um Windows XP/Vista handelt oder nicht. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.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. |