vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Dateisystem · Dateien - allgemein   |   VB-Versionen: VB.NET20.09.07
Sortierte Dateiliste erstellen (VB.NET)

Mit dieser Klasse lässt sich die Dateiliste eines Verzeichnis nach verschiedenen Kriterien wie Dateiname, Größe, Erstellungsdatums etc. sortieren.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  20.527 
www.tools4vb.deSystem:  WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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):

  • Dateiname
  • Größe
  • Typ
  • Erstellungsdatum
  • Änderungsdatum

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 20.527 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (4 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel