ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 28.08.2000

Diese Seite wurde zuletzt aktualisiert am 28.08.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Sortierte Dateien und Ordner

Zurück...


Anzeige

(-hg) mailto:hg_colladdsortedfilefolders@aboutvb.de

Sämtliche Auflistungsmöglichkeiten von Dateien oder Ordnern in einem Ordner, die in Visual Basic zur Verfügung stehen, liefern leider eine unsortierte Reihenfolge. Das gilt sowohl für die Dir-Funktion als auch für die Auflistungen des MSDN Library - VB FileSystemObjectFileSystemObjects (aus der Microsoft Scripting Runtime).

Mit Hilfe einer Collection, in die Sie die ermittelten Dateien oder Ordner gleich sortiert einfügen, lässt sich dieses Manko mildern. Beheben lässt es sich jedoch nicht vollständig und zufriedenstellend. Denn jede sortierte Auflistung stellt nur eine Momentaufnahme dar - werden Dateien oder Ordner hinzugefügt oder gelöscht, stimmt sie nicht mehr.

Eine nach Namen sortierte Liste von per Dir-Funktion ermittelten Datei- oder Ordner-Namen können Sie ganz einfach mittels der in Sortierte Collections"Sortierte Collections" vorgestellten Funktion AddSortedStr erstellen (ich setze hier einmal voraus, dass Sie wissen, wie Sie mit der Dir-Funktion umzugehen haben). Zum sortierten Einfügen von File- oder Folder-Objekten des FileSystemObjects stellen wir Ihnen hier einige Varianten des gleichen Prinzips vor. Mit der Funktion AddFileSorted fügen Sie File-Objekte in eine Collection ein, mit AddFolderSorted dementsprechend Folder-Objekte. Sie können sogar zunächst File-Objekte und anschließend Folder-Objekte (oder natürlich auch umgekehrt) in ein und dieselbe Collection einfügen. File- und Folder-Objekte verfügen gleichermaßen über die wesentlichen Eigenschaften wie Name, Path, Size usw. Die beiden Funktionen unterscheiden sich somit auch lediglich im Datentyp des übergebenen Objekts.

Die Varianten der beiden Funktionen zum Sortieren nach Größe heißen AddSortedFileBySize bzw. AddSortedFolderBySize. Beim Einfügen eines Ordners nach Größe sollten Sie allerdings bedenken, dass bei jedem Zugriff auf seine Size-Eigenschaft seine Größe jedes Mal aufs Neue ermittelt wird - bei sehr tief geschachtelten und reichlich gefüllten Ordnern kann das eine erhebliche Zeit lang dauern.

Zum Sortieren nach Datum gibt es wiederum drei Varianten - zum Sortieren nach den Datum-Eigenschaften DateCreated, DateLastModified und DateLastAccessed. Die Variante für DateCreated funktioniert unter Windows 9x jedoch nicht, da es dort Dateien gibt, bei denen dieses Datumsmerkmal unbekannt sein kann (etwa von bzw. unter MS-DOS angelegte Dateien).

Alle Funktionen geben jeweils als Rückgabewert die Index-Position zurück, an der das Element gerade eingefügt worden ist. Im optionalen Parameter können Sie festlegen, ob als Schlüssel zum Einfügen in die Collection der Dateiname einschließlich Dateierweiterung (Voreinstellung) oder der komplette Pfad verwendet werden soll.

Hier sehen Sie nun den Code für die File-Varianten zum sortierten Einfügen nach Name, Size und DateLastModified. Die übrigen Varianten finden Sie in dem Modul, das Sie zu diesem Artikel herunterladen können.

Public Enum KeyModeConstants
  kmName
  kmPath
End Enum

Public Function AddFileSorted(Collection As Collection, _
 Item As File, Optional ByVal KeyMode As KeyModeConstants = kmName) _
 As Long

  Dim nCount As Long
  Dim nHigh As Long
  Dim nLow As Long
  Dim nTest As Long
  Dim nKey As String
  
  Select Case KeyMode
    Case kmName
      nKey = Item.Name
    Case kmPath
      nKey = Item.Path
  End Select
  With Collection
    nCount = .Count
    If nCount Then
      If StrComp(Item.Name, .Item(1).Name, vbTextCompare) < 0 Then
        .Add Item, nKey, 1
        AddFileSorted = 1
      ElseIf StrComp(Item.Name, .Item(nCount).Name, vbTextCompare) _
       > 0 Then
        .Add Item, nKey
        AddFileSorted = nCount + 1
      Else
        nLow = 1
        nHigh = nCount
        Do
          nTest = (nLow + nHigh) \ 2
          If nTest = nLow Then
            Exit Do
          End If
          Select Case StrComp(Item.Name, .Item(nTest).Name, _
           vbTextCompare)
            Case Is < 0
              nHigh = nTest
            Case 0
              Exit Do
            Case Is > 0
              nLow = nTest
          End Select
        Loop
        If nTest < nCount Then
          Do While StrComp(.Item(nTest + 1).Name, Item.Name, _
           vbTextCompare) = 0
            nTest = nTest + 1
            If nTest = nCount Then
              Exit Do
            End If
          Loop
        End If
        .Add Item, nKey, , nTest
        AddFileSorted = nTest + 1
      End If
    Else
      .Add Item, nKey
      AddFileSorted = 1
    End If
  End With
End Function

Public Function AddFileSortedBySize(Collection As Collection, _
 Item As File, Optional ByVal KeyMode As KeyModeConstants = kmName) _
 As Long

  Dim nCount As Long
  Dim nHigh As Long
  Dim nLow As Long
  Dim nTest As Long
  Dim nTestItem As Object
  Dim nKey As String
  
  Select Case KeyMode
    Case kmName
      nKey = Item.Name
    Case kmPath
      nKey = Item.Path
  End Select
  With Collection
    nCount = .Count
    If nCount Then
      If Item.Size < .Item(1).Size Then
        .Add Item, nKey, 1
        AddFileSortedBySize = 1
      ElseIf Item.Size > .Item(nCount).Size Then
        .Add Item, nKey
        AddFileSortedBySize = nCount + 1
      Else
        nLow = 1
        nHigh = nCount
        Do
          nTest = (nLow + nHigh) \ 2
          If nTest = nLow Then
            Exit Do
          End If
          Set nTestItem = .Item(nTest)
          Select Case Item.Size
            Case Is < nTestItem.Size
              nHigh = nTest
            Case nTestItem.Size
              Exit Do
            Case Is > nTestItem.Size
              nLow = nTest
          End Select
        Loop
        If nTest < nCount Then
          Do While .Item(nTest + 1).Size = Item.Size
            nTest = nTest + 1
            If nTest = nCount Then
              Exit Do
            End If
          Loop
        End If
        .Add Item, nKey, , nTest
        AddFileSortedBySize = nTest + 1
      End If
    Else
      .Add Item, nKey
      AddFileSortedBySize = 1
    End If
  End With
End Function

Public Function AddFileSortedByDateLastModified _
 (Collection As Collection, Item As File, _
 Optional ByVal KeyMode As KeyModeConstants = kmName) As Long

  Dim nCount As Long
  Dim nHigh As Long
  Dim nLow As Long
  Dim nTest As Long
  Dim nTestItem As Object
  Dim nKey As String
  
  Select Case KeyMode
    Case kmName
      nKey = Item.Name
    Case kmPath
      nKey = Item.Path
  End Select
  With Collection
    nCount = .Count
    If nCount Then
      If Item.DateLastModified < .Item(1).DateLastModified Then
        .Add Item, nKey, 1
        AddFileSortedByDateLastModified = 1
      ElseIf Item.DateLastModified > _
       .Item(nCount).DateLastModified Then
        .Add Item, nKey
        AddFileSortedByDateLastModified = nCount + 1
      Else
        nLow = 1
        nHigh = nCount
        Do
          nTest = (nLow + nHigh) \ 2
          If nTest = nLow Then
            Exit Do
          End If
          Set nTestItem = .Item(nTest)
          Select Case Item.DateLastModified
            Case Is < nTestItem.DateLastModified
              nHigh = nTest
            Case nTestItem.DateLastModified
              Exit Do
            Case Is > nTestItem.DateLastModified
              nLow = nTest
          End Select
        Loop
        If nTest < nCount Then
          Do While .Item(nTest + 1).DateLastModified = _
           Item.DateLastModified
            nTest = nTest + 1
            If nTest = nCount Then
              Exit Do
            End If
          Loop
        End If
        .Add Item, nKey, , nTest
        AddFileSortedByDateLastModified = nTest + 1
      End If
    Else
      .Add Item, nKey
      AddFileSortedByDateLastModified = 1
    End If
  End With
End Function

Modul modCollAddSortedFileFolders (modCollAddSortedFileFolders.bas - ca. 20,5 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer