Nach LastChangedDate Sortierte File Liste

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Nach LastChangedDate Sortierte File Liste

    Hi,

    ich hoffe, meine Frage ist nicht zu blöde:

    Mit Directory.GetFiles erhalte ich eine Liste der Filenamen aus einem Vezeichnis.

    Ich hätte allerdings gern eine Liste der Filename nach dem Datum der letzten Änderung aufsteigend sortiert.

    Mir fällt schon einiges dazu ein. Z.B. die Liste in eine Datagridview zu schreiben .... und mit FileInfo die LastWriteTime in eine zweite Spalte anzufügen ... und dann nach dieser Spalte die DataGridView zu sortieren.

    Das scheint mir aber ein bissl viel Tobak zu sein. Das geht doch sicher sehr viel einfacher ... :)

    LG
    Peter
    Arbeite nicht mit Directory, sondern DirectoryInfo. Dann erhälst Du über GetFiles nicht nur Strings, sonern ausführliche FileInfos:

    VB.NET-Quellcode

    1. Dim Directory = New IO.DirectoryInfo(Verzeichnispfad)
    2. Dim FileNamesSortedByWriteTime = Directory.GetFiles.OrderBy(Function(x) x.LastWriteTime).Select(Function(x) x.Name)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Peter329 mit LINQ:

    VB.NET-Quellcode

    1. Dim List2 = List1.OrderBy(Function(s) s.Value).ToList()

    Und statt .Value die betreffende Property einsetzen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jau ... supi ... so etwas habe ich gesucht ! :)

    Das habe ich jetzt wie folgt versucht in eine Funktion umzusetzen:

    VB.NET-Quellcode

    1. Private Function GetSortedFiles(_Directory As String) As String()
    2. Dim Directory = New IO.DirectoryInfo(_Directory)
    3. Dim FileNamesSorted = Directory.GetFiles("img*.png").OrderBy(Function(x) x.LastWriteTime).Select(Function(x) x.Name)
    4. For Each entry In FileNamesSorted
    5. Debug.Print(entry)
    6. Next
    7. Return FileNamesSorted
    8. End Function


    Und das funtioniert auch sehr gut.

    Allerdings mein Aufruf scheitert ...

    VB.NET-Quellcode

    1. Dim myFrames As String() = GetSortedFiles(myFolder)


    Das liegt daran, dass myFrames vom Typ String() ist ... während FileNamesSorted irgendwas vom Typ System.Linq.Enumerable.Where.... ist. Und natürlich gibt es dann eine InvalidCastException ....

    Könnt ihr mir noch sagen, wie ich das Dingens "caste" ?

    Auch wenn es syntaktisch richtig ist, so geht es jedenfalls nicht:

    VB.NET-Quellcode

    1. Return DirectCast(FileNamesSorted, String())


    Wäre ja auch zu einfach gewesen ... :)

    LG
    Peter
    mach Return FileNamesSorted.ToArray
    Oder verwende einen passenden Rückgabetypen (IEnumerable(Of String))
    Ist aber immer die Frage, ob es sinnvoll ist, mit Strings weiterzuarbeiten oder doch besser mit FileInfos. In FileInfos stecken viel mehr Infos und Möglichkeiten (Da es umfangreiche Objekte sind), die man ggf. weiternutzen kann.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.