Avatar billede th20 Nybegynder
31. januar 2005 - 00:09 Der er 12 kommentarer og
1 løsning

sort fileinfo

Hejsa

Jeg har lavet en list over en bestemt typer filer i en mappe. Jeg vil nu gerne have sorteret listen i alfabetisk rækkefølge, hvordan gør jeg det?

Her er lidt af den kode jeg bruger:

Dim pk3files() As FileInfo = dirinfo.GetFiles

        Dim filelist(pk3files.Length - 1) As filesinfo


        Dim pk3file As FileInfo, index As Integer
        For Each pk3file In pk3files
            Dim pk3info As New filesinfo()
            pk3info.name = pk3file.Name
            pk3info.filesize = pk3file.Length
            pk3info.filedate = pk3file.LastWriteTime
            filelist(index) = pk3info
            index += 1
        Next
Avatar billede arne_v Ekspert
31. januar 2005 - 07:37 #1
Dim pk3files() As FileInfo = dirinfo.GetFiles
Array.Sort(pk3files)
Avatar billede th20 Nybegynder
31. januar 2005 - 10:04 #2
Det har jeg prøvet, men så generere den en fejl med icompare
Avatar billede arne_v Ekspert
31. januar 2005 - 10:10 #3
Ah ja - FileInfo implementerer ikke IComparable.

Så bliver du nødt til at lave en:

Array.Sort(pk3files, MyFileInfoComparer)

hvor klassen MyFileInfoComparer implementerer IComparer (og derfor har
en Compare metode som sammenligner to FileInfo via deres Name property).
Avatar billede arne_v Ekspert
31. januar 2005 - 10:10 #4
Array.Sort(pk3files, New MyFileInfoComparer)
Avatar billede th20 Nybegynder
31. januar 2005 - 10:15 #5
Kan du hjælpe med klassen også?
Avatar billede arne_v Ekspert
31. januar 2005 - 10:22 #6
5 minutter
Avatar billede arne_v Ekspert
31. januar 2005 - 10:31 #7
Imports System
Imports System.Collections
Imports System.IO

Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Dim di As DirectoryInfo = New DirectoryInfo("C:\")
        Dim fi As FileInfo() = di.GetFiles
        Dim i As Integer
        For i = 0 To (fi.Length - 1)
            Console.WriteLine(fi(i).Name)
        Next
        Array.Sort(fi, New FileInfoComparer)
        For i = 0 To (fi.Length - 1)
            Console.WriteLine(fi(i).Name)
        Next
    End Sub
End Class

Public Class FileInfoComparer
Implements IComparer
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
        Return String.Compare(CType(x, FileInfo).Name, CType(y, FileInfo).Name)
    End Function
End Class
Avatar billede arne_v Ekspert
31. januar 2005 - 10:32 #8
Men så vidt jeg kan se, så returnerer GetFiles allerede filerne sorteret.
Avatar billede th20 Nybegynder
31. januar 2005 - 11:04 #9
Jeg er lige ved at prøve det. Med hensyn til at den selv skulle sortere så ja de første gange jeg prøvede stod de rigtigt, men da jeg slettede en fil og satte den tilbage i mappen igen, så kom den lige pludselig sidst.
Avatar billede th20 Nybegynder
31. januar 2005 - 11:17 #10
ok har prøvet det nu, men den bliver ved med at smække min ene fil til sidst. den skulle ligge som nr 3 men kommer som nummer 9
Avatar billede arne_v Ekspert
31. januar 2005 - 11:37 #11
På trods af at du kalder Array.Sort med din Comparer ?
Avatar billede th20 Nybegynder
31. januar 2005 - 11:39 #12
ja, forstår det ikke helt, jeg kigger lige lidt mere og vender tilbage i eftermiddag, tak for hjælpen indtil videre, der skal nok komme point din vej :)
Avatar billede th20 Nybegynder
31. januar 2005 - 15:20 #13
Hmm det ser ud til at virke nu. Slettede alt kode og begyndte for fra, og den virker uden den sorterig du skrev. Så du har ret i den gør det på filnavn, underligt det ikke virkede før. Tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester