VB2012 Zoeken naar meerdere bestandstypen

Status
Niet open voor verdere reacties.

woellie123

Gebruiker
Lid geworden
9 jul 2010
Berichten
223
Hallo!

Ik was een beetje dingen aan het uit proberen en ik vond nog wat code die ik wel wat aan zou willen passen met meer functies.
De code zoekt alle bestandstypen van bijvoorbeeld mp3.
Nu heb ik een checkedlistbox toegevoegd, met daarin een aantal bestandstypen.
Nu wil ik als je er bijvoorbeeld 2 selecteert het programma alleen die bestandstypen zoekt.
Ik heb het werkend voor 1 bestandstype, maar ik kan het niet werkend krijgen met 2.

Dit is de code die ik zover heb:
Code:
    Public Function Bestanden(ByVal initial As String) As List(Of String)
        Dim result As New List(Of String)
        Dim stack As New Stack(Of String)
        stack.Push(initial)
        Do While (stack.Count > 0)
            Dim dir As String = stack.Pop
            Dim sb As New System.Text.StringBuilder
            For Each item In List_File.CheckedItems
                sb.Append(item)
                sb.Append(" ")
            Next
            Try
                result.AddRange(IO.Directory.GetFiles(dir, sb.ToString()))
                For Each directoryName As String In IO.Directory.GetDirectories(dir)
                    stack.Push(directoryName)
                Next
            Catch
            End Try
        Loop
        Return result
    End Function
Hier is List_File de CheckedListBox1.

Iemand enig idee? Ik heb al op google rondgezocht zonder succes.
 
[cpp]Dim files() As String
files = IO.Directory.GetFiles(path, "*.mp3|*.wav", SearchOption.TopDirectoryOnly)
For Each FileName As String In files
MessageBox.Show(FileName)
Next[/cpp]

Zoiets?
 
Helaas werkt het niet, ik heb het programma voor 15 minuten laten draaien, zonder resultaat.
Ook als ik bijvoorbeeld "*.mp3 | *.wav" doe, dus met spaties er tussen werkt het niet.
 
Hm, je hebt gelijk.
Schijnbaar mag je dit teken | niet gebruiken.

[cpp]Dim extensions As String() = {"*.wav", "*.mp3"}
For Each ex As String In extensions
Dim files() As String = IO.Directory.GetFiles("path", ex, IO.SearchOption.TopDirectoryOnly)
For Each FileName As String In files
MessageBox.Show(FileName)
Next
Next[/cpp]
 
Laatst bewerkt:
Zo ver ik weet, mag je ook geen komma gebruiken, tenminste zover ik het weet. (ik kan het natuurlijk ook vreselijk fout hebben gedaan ;))
Ik zal deze code even uitproberen.

In ieder geval bedankt voor je hulp!
 
Ik gebruik toch ook geen komma ? :eek:
 
Ik bedoelde bij de
Code:
Dim extensions As String() = [B][U]{"*.wav", "*.mp3"}[/U][/B]
        Dim files() As String = IO.Directory.GetFiles("path", "*.lnk", IO.SearchOption.TopDirectoryOnly)
        For Each ex As String In extensions
            For Each FileName As String In files
                MessageBox.Show(FileName)
            Next
        Next

Nog geen tijd gehad om het te proberen maar zal het zo snel mogelijk doen
 
Die komma hoort bij de initialisatie van de array.

[CPP]Dim ar As String() = {"een","twee","drie"}
[/CPP]
is hetzelfde als:

[CPP]Dim ar As String()
ar(0) = "een"
ar(1) = "twee"
ar(2) = "drie"[/CPP]
 
Hoi,

Ik heb zelf ook even op internet gekeken, want ik was wel benieuwd of er nog een andere mogelijkheid zou zijn, en ik heb er een gevonden:
[CPP] Dim Path As String = "path"
Dim Files() As String = (From fi In IO.Directory.GetFiles(Path, "*.*", IO.SearchOption.AllDirectories) Where fi.ToLower.EndsWith(".mp3") Or fi.ToLower.EndsWith(".wav") Select fi).ToArray

For i As Integer = 0 To Files.Count - 1 Step 1
ListBox1.Items.Add(Files(i).Replace("/", "\").Split("\").Last)
Next[/CPP]

Ik heb het hier gevonden: http://stackoverflow.com/questions/7039580/multiple-file-extensions-searchpattern-for-system-io-directory-getfiles#answer-7039730

Fijne feestdagen en succes!:thumb:
MartinJM

[edit]
Hoe het in de originele post wordt aangegeven heeft ook wel wat handigs:
[/edit]
[CPP] Dim Path As String = "path"
Dim Ext() As String = {".mp3", ".wav"}
Dim Files() As String = (From fi In New IO.DirectoryInfo(Path).GetFiles("*.*", IO.SearchOption.AllDirectories) Where Ext.Contains(fi.Extension.ToLower) Select fi.FullName).ToArray

For i As Integer = 0 To Files.Count - 1 Step 1
ListBox1.Items.Add(Files(i).Replace("/", "\").Split("\").Last)
Next[/CPP]
 
Laatst bewerkt:
@MartinJM: in essentie doen we hetzelfde.

We gebruiken beiden de method IO.Directory.GetFiles
 
Yep, ik vond dit er alleen leuker uit zien, zo op een regel :d

Maar in ieder geval heb ik er een manier bij geleerd. Misschien dat het handig blijkt later en dat je dan denkt, hee, dat kon toch ook zo? En nu weten jullie het ook :) (waarschijnlijk ook zo weer vergeten, maar ik ook :P)

Fijne feestdagen!
MartinJM

[edit]
Waarom staat er in je searchpattern trouwens "*.lnk"?
[/edit]
 
Laatst bewerkt:
Hallo,
Ook fijne feestdagen :cool:

Nu heb ik nog een vraag, is het ook mogelijk om in een CheckedListBox te selecteren welke bestandstypen je wilt (bijv. mp3 en mid).
En dat de code zich daaraan aanpast?

EDIT:
Als ik hem via deze code op de F:\ Schijf laat scannen (mijn 500gig externe hdd)
Krijg ik een error :
Code:
Kan een gedeelte van het pad C:\Users\Gebruiker\Documents\Visual Studio 2012\Projects\MP3 Searcher\MP3 Searcher\bin\Debug\path niet vinden.
 
Laatst bewerkt:
Waarom staat er in je searchpattern trouwens "*.lnk"?
Omdat ik dat gebruikte om de code te testen ;)
Is nu aangepast.

woellie123 zei:
Nu heb ik nog een vraag, is het ook mogelijk om in een CheckedListBox te selecteren welke bestandstypen je wilt (bijv. mp3 en mid).
En dat de code zich daaraan aanpast?
Ja. Dan zou je aan zoiets moeten denken:

[CPP] For Each ex As String In CheckedListBox1.CheckedItems
Dim files() As String = IO.Directory.GetFiles("path", ex, IO.SearchOption.TopDirectoryOnly)
For Each FileName As String In files
MessageBox.Show(FileName)
Next
Next[/CPP]

Snap je?

En je moet natuurlijk wel "path" veranderen in het pad waarin jij wilt zoeken ;)
(Kan een gedeelte van het pad C:\Users\Gebruiker\Documents\Visual Studio 2012\Projects\MP3 Searcher\MP3 Searcher\bin\Debug\path niet vinden.)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan