Newsgroup: it.comp.lang.visual-basic
Titolo: Ricerca files in una cartella

Ciao,
con questo codice (Visual Studio 2010) vedo se ci sono dei files in una cartella:
 
        Dim counter = My.Computer.FileSystem.GetFiles("C:\MiaCartella\")
 
        If counter.count > 0 Then
            frmAlert.Show()
        Else
 
        End If
 
Se volessi cercare solo file con una specifica parola all'interno come faccio?
Ho provato così:
 
 Dim counter = My.Computer.FileSystem.GetFiles("C:\MiaCartella\", "*Verde*.jpg")
 
        If counter.count > 0 Then
            frmAlert.Show()
        Else
 
        End If
 
ma mi va in errore... In pratica il nome file deve contenere una parola ma potrei anche avere la necessità di cercarne di più
es: "C:\MiaCartella\", "*Verde*.jpg" AND "*Giallo*.jpg"
 
Infine, nella maschera che si apre in caso ci siano files, una listbox deve mostrare solo i files con il nome contenuto
 
grazie
Marco

I metodi che trovi a partire da 'My.xxx' sono spesso scorciatoie a funzioni più complete del framework .NET, e vale quasi sempre la pena fare riferimento direttamente a quelle; in questo caso le classi che trovi in 'System.IO' hanno quello che serve:
 
Dim di As New System.IO.DirectoryInfo("C:\MiaCartella\")
If di.Exists Then
    Dim fi() As System.IO.FileInfo = di.GetFiles("*Verde*.jpg")
    If fi.Length > 0 Then
        frmAlert.Show()
    Else
 
    End If
End If

Marco75 ha scritto:

In alternativa a quanto suggerito da Luca D, potresti ottenere
 tutta la lista di nomi file e poi fitrarla per contenuto.
 
Roba tipo (pseudocodice che più pseudo non si può):
Dim strNomeFile(NumeroFileNellaCartella)
 
[Ottieni i nomi dei file e mettili nella matrice]
 
For N=0 to NumeroFileNellaCartella
If strNomeFile(N).Contains ("verde") then
Listbox.AddItem strNomeFile
End If
Next N
 
Bye, G.


Grazie ad entrambi, funziona sia il codice per cercare i files che quello per filtrare la listbox, spero di cavarmela con tutti i dettagli che andrò a sviluppare.
 
solo una cosa, il codice Dim fi() As System.IO.FileInfo = di.GetFiles("*Verde*.jpg")  filtra il Verde, ma se volessi filtrare sia Verde che Bianco escludendo Giallo e Blu come faccio?
 
Una cosa del genere?
Dim fi() As System.IO.FileInfo = di.GetFiles("*Verde*.jpg") or Dim fi() As System.IO.FileInfo = di.GetFiles("*Bianco*.jpg")
 
Marco


Una parte l'ho risolta e sembra funzionare tutto, ho ancora qualche difficoltà nel popolare la listbox.
Questo è il pulsante che applica il filtro:
 
 'Filtro Verde e Bianco
        lbVecchie.Items.Clear()
        Dim CartellaVecchie As New IO.DirectoryInfo("MiaCartella\")
        Dim FileVecchie() As IO.FileInfo
        Dim FileInCartellaVecchie As IO.FileInfo
 
        FileVecchie = CartellaVecchie.GetFiles("*Verde*.jpg")
 
        For Each FileInCartellaVecchie In FileVecchie
            lbVecchie.Items.Add(FileInCartellaVecchie)
        Next
 
vorrei che FileVecchie filtrasse sia Verde che Bianco (escludendo quindi gli altri tipi)
grazie ancora
Marco
 

 vorrei che FileVecchie filtrasse sia Verde che Bianco (escludendo quindi gli altri tipi)
 
Banalmente applica .GetFiles per ogni filtro che ti interessa
 
lbVecchie.Items.Clear()
Dim CartellaVecchie As New IO.DirectoryInfo("MiaCartella\")
Dim FileVecchie() As IO.FileInfo
Dim FileInCartellaVecchie As IO.FileInfo
Dim Filtri() As String = {"*Verde*.jpg","*Bianco*.jpg","QuelloCheVuoi*.jpg"}
 
For Each f As String in Filtri
	FileVecchie = CartellaVecchie.GetFiles(f)
 
	For Each FileInCartellaVecchie In FileVecchie
		lbVecchie.Items.Add(FileInCartellaVecchie)
	Next
Next


Ciao,
il tuo codice non funziona, mi filtra solo uno dei 2...
 
avevo appena risolto con questo codice, forse meno snello del tuo ma funziona:
 
        lbVecchie.Items.Clear()
        Dim CartellaVecchie As New IO.DirectoryInfo("MiaCartella")
        Dim FileVecchie2() As IO.FileInfo
        Dim FileInCartellaVecchie As IO.FileInfo
        Dim FileInCartellaVecchie2 As IO.FileInfo
 
        FileVecchie = CartellaVecchie.GetFiles("*AMM*.jpg")
        FileVecchie2 = CartellaVecchie.GetFiles("*FIRMA*.jpg")
 
 
        For Each FileInCartellaVecchie In FileVecchie
            lbVecchie.Items.Add(FileInCartellaVecchie)
        Next
 
        For Each FileInCartellaVecchie2 In FileVecchie2
            lbVecchie.Items.Add(FileInCartellaVecchie2)
        Next
 
Marco

 avevo appena risolto con questo codice, forse meno snello del tuo ma funziona:
 
Beh, il tuo codice è funzionalmente identico, solo che "esplode" il ciclo FOR in due chiamate esplicite... se funziona l'uno deve funzionare anche l'altro (provato prima di postarlo, infatti, senza problemi)


l'ho provato e non andava così sono tornato al mio codice. Magari ho sbagliato io qualcosa comunque ora ho già rilasciato l'aggiornamento...
Se capita di rimetterci mano lo provo nuovamente..
Marco