Heute möchten wir Ihnen eine Klasse vorstellen, mit der sich eine Dateiliste eines Verzeichnisses nach verschiedenen Kriterien wie Dateiname, Größe oder auch Erstellungsdatum sortieren lässt. Die Dateiliste wird hierbei über die System.IO.Directory.GetFiles-Methode erstellt. Als Rückgabe erhalten wir ein Array mit den Dateinamen. Um das Array nun nach verschiedenen Datei-Merkmalen sortieren zu können, müssen wir uns eine Klasse erstellen, die die Schnittstelle IComparer implementiert. Beim Aufruf der Array.Sort-Methode übergeben wir dann die Klasse mit dem gewünschten Sortiermerkmal. FileListComparer-Klasse ' Klasse für die Sortierung einer Dateiliste Public Class FileListComparer Implements IComparer ' unterstützte Sortierfolgen Public Enum SortOrder SortByName = 0 SortBySize = 1 SortByType = 2 SortByCreationTime = 3 SortByLastWriteTime = 4 SortByLastAccessTime = 5 End Enum Private m_SortOrder As SortOrder Public Sub New() ' Standard-Sortierung nach Dateiname m_SortOrder = SortOrder.SortByName End Sub Public Sub New(ByVal SortBy As SortOrder) ' Überladen mit Angabe der gewünschten Sortierfolge m_SortOrder = SortBy End Sub Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _ Implements System.Collections.IComparer.Compare ' Vergleich-Parameter (x,y) in Strings umwandeln Dim xFile As String = DirectCast(x, String) Dim yFile As String = DirectCast(y, String) Select Case m_SortOrder Case SortOrder.SortByName ' nach Dateiname sortieren Return String.Compare(xFile, yFile, True) Case SortOrder.SortBySize ' nach Dateigröße sortieren Dim xSize As Long = New FileInfo(xFile).Length Dim ySize As Long = New FileInfo(yFile).Length If xSize < ySize Then Return -1 ElseIf xSize = ySize Then Return 0 Else Return 1 End If Case SortOrder.SortByType ' nach Dateityp sortieren Dim xType As String = New FileInfo(xFile).Extension Dim yType As String = New FileInfo(yFile).Extension Return String.Compare(xType, yType) Case SortOrder.SortByCreationTime ' nach Erstellungsdatum sortieren Dim xTime As Long = File.GetCreationTime(xFile).Ticks Dim yTime As Long = File.GetCreationTime(yFile).Ticks If xTime < yTime Then Return -1 ElseIf xTime = yTime Then Return 0 Else Return 1 End If Case SortOrder.SortByLastWriteTime ' nach Änderungsdatum sortieren Dim xTime As Long = File.GetLastWriteTime(xFile).Ticks Dim yTime As Long = File.GetLastWriteTime(yFile).Ticks If xTime < yTime Then Return -1 ElseIf xTime = yTime Then Return 0 Else Return 1 End If Case SortOrder.SortByLastAccessTime ' nach Änderungsdatum sortieren Dim xTime As Long = File.GetLastAccessTime(xFile).Ticks Dim yTime As Long = File.GetLastAccessTime(yFile).Ticks If xTime < yTime Then Return -1 ElseIf xTime = yTime Then Return 0 Else Return 1 End If End Select End Function End Class Nachfolgendes Beispiel demonstriert die Anwendung der Klasse. Erstellen Sie hierzu ein neues Windows-Forms-Projekt und platzieren ein ListView-Control auf die Form. Erstellen Sie im ListView folgende Spalten (über die Columns-Auflistung im Eigenschaftenfenster des Controls):
Platzieren Sie unterhalb des ListView-Controls 5 Buttons und beschriften Sie diese mit "Dateiname", "Größe", "Typ", "Erstellungsdatum" und "Änderungsdatum". Beim Klick auf den jeweiligen Button werden die Dateien eines vorgebenenen Verzeichnisses in der entsprechenden Sortierfolge im ListView-Control angezeigt. Imports System.IO Public Class Form1 ' Klasse für die Sortierung einer Dateiliste Public Class FileListComparer Implements IComparer ' siehe Code von oben ' ... End Class ' Vorgabe: Verzeichnis Private sPath As String = "d:\ordner" Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' nach Dateinamen sortieren ShowFiles sPath, FileListComparer.SortOrder.SortByName End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click ' nach Dateigröße sortieren ShowFiles sPath, FileListComparer.SortOrder.SortBySize End Sub Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click ' nach Dateityp sortieren ShowFiles sPath, FileListComparer.SortOrder.SortByType End Sub Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click ' nach Erstellungsdatum sortieren ShowFiles sPath, FileListComparer.SortOrder.SortByCreationTime End Sub Private Sub Button5_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button5.Click ' nach Änderungsdatum sortieren ShowFiles sPath, FileListComparer.SortOrder.SortByLastWriteTime End Sub ''' <summary> ''' Sortierte Dateiliste im ListView anzeigen ''' </summary> Private Sub ShowFiles(ByVal sPath As String, ByVal nSort As FileListComparer.SortOrder) ' ListView-Inhalt löschen ListView1.Items.Clear If Directory.Exists(sPath) Then ' Dateiliste als Array Dim sFiles() As String = Directory.GetFiles(sPath) ' Array nach Sortiermerkmal sortieren Array.Sort(sFiles, New FileListComparer(nSort)) ' Dateiliste im ListView anzeigen Dim oFile As FileInfo For i As Integer = 0 To sFiles.Length - 1 oFile = New FileInfo(sFiles(i)) With ListView1.Items.Add(oFile.Name) .SubItems.Add(oFile.Length) .SubItems.Add(oFile.Extension) .SubItems.Add(oFile.LastWriteTime) .SubItems.Add(oFile.CreationTime) End With Next End If End Sub End Class Dieser Tipp wurde bereits 23.080 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 (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. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |