Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Cercare un file video su un hdd con Ricorsione

    Salve, non sono un esperto in vb.net ed ho inziato da poco la programmazione desktop, vorrei realizzare un codice che mi cerca un file in tutte le sottocartelle dell'unità disco dove si esegue il programma, però non riesco a farlo funzionare bene e vorrei che mi cercasse il file inserendo anche solo le iniziali del nome e non l'intero nome... Per adesso trova solo il file se viene inserito l'intero nome.estensione e solo nella directory principale e non nelle sotto directory, non sono riuscito a far ciclare GetFiles("*.*", IO.SearchOption.AllDirectories)

    codice:
    Private Function TrovaFileNellaCartella(ByVal NomeDelFileDaCercare As String, ByVal PercorsoCartella As String) As String
    
            Dim res As String = ""
            Dim Cartelle() As String
    
            Try
    
                Dim FileContenuti() As IO.FileInfo = New IO.DirectoryInfo(PercorsoCartella).GetFiles()
    
    
                For i As Integer = 0 To FileContenuti.Length - 1
                    If FileContenuti(i).Name.ToUpper = NomeDelFileDaCercare.ToUpper Then
    
                        Dim coso As Integer = -1
    
                        Select Case UCase(FileContenuti(i).Extension)
                            Case ".AVI"
                                coso = 1
                            Case ".MKV"
                                coso = 2
                            Case ".MPG"
                                coso = 4
                            Case ".TS"
                                coso = 5
                            Case ".DIVX"
                                coso = 6
                            Case ".MPEG"
                                coso = 4
                            Case ".WMV"
                                coso = 7
                            Case ".VOB"
                                coso = 8
                            Case ".MP4"
                                coso = 9
                            Case ".MOV"
                                coso = 9
                            Case ".Mp4"
                                coso = 9
                            Case ".MPA"
                                coso = 9
                            Case ".MP2"
                                coso = 9
                            Case ".MOV"
                                coso = 9
                            Case ".MKA"
                                coso = 2
                            Case ".MOV"
                                coso = 9
                            Case ".IFO"
                                coso = 6
                                'Case .... <- etcetera...
                            Case Else
                                coso = 0
                        End Select
    
                        If Not coso = 0 Then
                            estensione.Text = FileContenuti(i).Extension
                            ListView2.Items.Add(New ListViewItem(FileContenuti(i).ToString, coso))
    
                        End If
    
    
                        Return FileContenuti(i).FullName
    
                    End If
    
                Next
                Cartelle = IO.Directory.GetDirectories(PercorsoCartella)
                For i As Integer = 0 To Cartelle.Length - 1
                    res = TrovaFileNellaCartella(NomeDelFileDaCercare, Cartelle(i))
                    If res <> "" Then
                        Return res
                    End If
                Next
    
                Return res
    
            Catch
    
                MsgBox("Cartella protetta o inaccessibile..... Selezionare un altra cartella", MsgBoxStyle.Critical)
    
            End Try
    
        End Function
    Il pulsante ha questo codice

    codice:
        Private Sub buttoncerca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttoncerca.Click
            Dim nome As String = Application.StartupPath
            Dim letteraunita() As String = nome.Substring(0, 3).Split("\")
            letteraunita(0) = letteraunita(0) + "\"
            TrovaFileNellaCartella(textcerca.Text, letteraunita(0))
    
    
        End Sub
    Oltre a qui non sono riuscito ad andare viste le mie non molte conoscenze desktop..
    QUalk1 può aiutarmi per fare in modo che funge come una normale ricerca di un file ?

    Ringrazio anticipatamente

  2. #2
    Ciao a tutti.....
    Mi son messo e ho riscritto tutto il codice, lo posto anche se ancora ha bisogno di essere ottimizzato per bene, ma funge correttamente o almeno sembra....

    Ecco il codice per chi possa servire...

    codice:
     Public Sub ProcessDir(ByVal Dir As String)
    
            ' Aumenta ad ogni ciclo di funzione la ProgressBar
            ProgressBar1.Value = ProgressBar1.Value + 10
    
            'Azzera la ProgressBar
            If ProgressBar1.Value = 10000 Then ProgressBar1.Value = 0
    
            ' Processa la lista dei files trovati nella directory passata
            Try 'Controllo di errori
                Dim fileEntries As String() = Directory.GetFiles(Dir)
                Dim splitta() As String
    
    
                For Each fileName As String In fileEntries
                    ' Togli gli spazi iniziali o finali della stringa passata
                    Dim stringa As String = Trim(fileName)
    
                    Dim i As Integer
                    Dim testodacercare As String
                    Dim nomedelfileminuscolo As String
                    Dim coso As Integer = -1
                    Dim verifica As Integer = 0
    
    
                    'Converte tuttto il testo da cercare in minuscolo + toglie gli spazi iniziali o finali
                    testodacercare = Trim(LCase(textcerca.Text))
    
    
    
    
    
                    'Splitta il percorso completo lasciando solo il nome del file
                    splitta = Split(stringa, Dir.ToString)
    
    
                    'Inizio ciclo per splittare
                    For i = 0 To UBound(splitta)
    
    
                        ' Passa testo splittato in minuscolo
    
                        nomedelfileminuscolo = LCase(splitta(i))
    
    
    
                        ' Verifica l'estensione - è da ottimizzare ancora,ma funge!!! cambierò sistema utilizzando un Case
                        If nomedelfileminuscolo.IndexOf(testodacercare) <> -1 Then
    
                            If LCase(stringa.IndexOf(".avi") <> -1) Then
                                verifica = 1
                                coso = 1
                            End If
    
                            If LCase(stringa.IndexOf(".mkv") <> -1) Then
                                verifica = 1
                                coso = 2
                            End If
    
                            If LCase(stringa.IndexOf(".mpg") <> -1) Then
                                verifica = 1
                                coso = 4
                            End If
    
                            If LCase(stringa.IndexOf(".ts") <> -1) Then
                                verifica = 1
                                coso = 5
                            End If
    
                            If LCase(stringa.IndexOf(".divx") <> -1) Then
                                verifica = 1
                                coso = 6
                            End If
    
                            If LCase(stringa.IndexOf(".mpeg") <> -1) Then
                                verifica = 1
                                coso = 4
                            End If
    
                            If LCase(stringa.IndexOf(".wmv") <> -1) Then
                                verifica = 1
                                coso = 7
                            End If
    
                            If LCase(stringa.IndexOf(".vob") <> -1) Then
                                verifica = 1
                                coso = 8
                            End If
    
                            If LCase(stringa.IndexOf(".mp4") <> -1) Then
                                verifica = 1
                                coso = 9
                            End If
    
                            If LCase(stringa.IndexOf(".mov") <> -1) Then
                                verifica = 1
                                coso = 9
                            End If
    
                            If LCase(stringa.IndexOf(".mpa") <> -1) Then
                                verifica = 1
                                coso = 9
                            End If
    
                            If LCase(stringa.IndexOf(".mp2") <> -1) Then
                                verifica = 1
                                coso = 9
                            End If
    
                            If LCase(stringa.IndexOf(".mka") <> -1) Then
                                verifica = 1
                                coso = 9
                            End If
    
                            If LCase(stringa.IndexOf(".ifo") <> -1) Then
                                verifica = 1
                                coso = 6
                            End If
    
    
                            ' Controlla se è stato trovato almeno un file e lo aggiunge alla listView
                            If (verifica = 1) Then
    
                                ListView2.Items.Add(New ListViewItem(fileName.ToString, coso))
                                ListView2.Refresh()
                                ProgressBar1.Value = 0
    
    
                            End If
    
                        End If
    
    
                    Next
                Next
    
                ' Processa tutte le directory trovate nella directory passata alla funzione
    
    
                Dim subdirectoryEntries As String() = Directory.GetDirectories(Dir)
                For Each subdirectory As String In subdirectoryEntries
                    ProcessDir(subdirectory)
    
                Next
                ' Se trova un errore saltalo e continua il processo e azzera la ProgressBar
            Catch ex As Exception
                ProgressBar1.Value = 0
            End Try
        End Sub
    Grazie di tutto

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    1. Leggi il regolamento.
    2. VB.NET (muahahah) ha una sua sezione.
    3. Il codice postalo usando il tag CODE o non si capisce un tubo.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319

    Moderazione

    Sposto sul forum VB e .NET Framework.

    Ove (e se) possibile, cercherò di aggiungere i tag CODE


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Grazie ragazzi...... Ecco il codice ottimizzato per quanto ho potuto inquando non sono un esperto di .net...

    codice:
        Public Sub ProcessDir(ByVal Dir As String)
            Dim splitta() As String
            Dim i As Integer
            Dim testodacercare As String
            Dim estensionefile As String = ""
            Dim coso As Integer = -1
            Dim verifica As Integer = 0
            Dim nomefilesplittato As String = ""
            Dim estensione As Object
            Dim stringa As String
    
    
            ' Aumenta ad ogni ciclo di funzione la ProgressBar
            ProgressBar1.Value = ProgressBar1.Value + 10
    
            'Azzera la ProgressBar
            If ProgressBar1.Value = 10000 Then ProgressBar1.Value = 0
    
            ' Processa la lista dei files trovati nella directory passata
            Try 'Controllo di errori
                Dim fileEntries As String() = Directory.GetFiles(Dir)
    
                'Converte tutto il testo da cercare in minuscolo + toglie gli spazi iniziali o finali
                testodacercare = Trim(LCase(textcerca.Text))
    
                For Each fileName As String In fileEntries
    
                    'Converte tutto il nome del file in minuscolo + toglie gli spazi iniziali o finali
                    stringa = Trim(LCase(fileName))
    
    
    
                    'Splitta il percorso completo lasciando solo il nome del file
                    splitta = Split(stringa, "\")
    
                    'Inizio ciclo per splittare
                    For i = 0 To UBound(splitta)
                        splitta(i) = splitta(i)
                    Next
    
                    'Prendi l'ultimo indice dell'array splitta e passa il valore nella variabile
                    nomefilesplittato = splitta(UBound(splitta))
    
                    'Splitta il nome del file togliendo i punti per risalire all'estensione
                    estensione = Split(nomefilesplittato, ".")
    
                    'Inizio ciclo per splittare
                    For i = 0 To UBound(estensione)
                        estensione(i) = estensione(i)
                    Next
    
                    'Prendi l'ultimo indice dell'array estensionefile e passa il valore nella variabile
                    estensionefile = estensione(UBound(estensione))
                    'trovata l'estensione aggiungiamo il punto per il riconoscimento dell'estensione del file
                    estensionefile = "." & estensionefile
    
                    ' contralla l'estensione del file e applica un icona
                    Select Case UCase(estensionefile)
                        Case ".AVI"
                            coso = 1
                        Case ".MKV"
                            coso = 2
                        Case ".MPG"
                            coso = 4
                        Case ".TS"
                            coso = 5
                        Case ".DIVX"
                            coso = 6
                        Case ".MPEG"
                            coso = 4
                        Case ".WMV"
                            coso = 7
                        Case ".VOB"
                            coso = 8
                        Case ".MP4"
                            coso = 9
                        Case ".MOV"
                            coso = 9
                        Case ".Mp4"
                            coso = 9
                        Case ".MPA"
                            coso = 9
                        Case ".MP2"
                            coso = 9
                        Case ".MOV"
                            coso = 9
                        Case ".MKA"
                            coso = 2
                        Case ".MOV"
                            coso = 9
                        Case ".IFO"
                            coso = 6
                        Case Else
                            coso = 0
                    End Select
    
                    ' Controlla se è stato trovato almeno un file e se l'icona non è uguale a 0 e lo aggiunge alla listView
                    If ((nomefilesplittato.IndexOf(testodacercare) <> -1) And Not (coso = 0)) Then
                        ListView2.Enabled = True
                        ListView2.Items.Add(New ListViewItem(fileName.ToString, coso))
                        ' Aggiorna ListView
                        ListView2.Refresh()
                        ProgressBar1.Value = 0
                    End If
    
                Next
    
    
                
    
    
    
    
                ' Processa tutte le directory trovate nella directory passata alla funzione
    
    
                Dim subdirectoryEntries As String() = Directory.GetDirectories(Dir)
                For Each subdirectory As String In subdirectoryEntries
    
                    ProcessDir(subdirectory)
                 
                Next
    
                ' Se trova un errore saltalo e continua il processo e azzera la ProgressBar
            Catch ex As Exception
                ProgressBar1.Value = 0
            End Try
        End Sub
    Spero che questo mio lavoro possa servire a qualk1 per velocizzare i tempi nella creazione di un codice di ricerca per file...
    E se qualk1 ha un suggerimento per migliorare tale codice lo posti pure...
    Ciao a tutti...

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    In effetti un paio di miglioramenti si possono fare.

    Ad esempio:

    1) Eliminare questo ciclo For/Next che non serve a nulla:
    codice:
    'Inizio ciclo per splittare
    For i = 0 To UBound(splitta)
        splitta(i) = splitta(i)
    Next

    2) Eliminare tutta questa parte di codice :
    codice:
    'Prendi l'ultimo indice dell'array splitta e passa il valore nella variabile
    nomefilesplittato = splitta(UBound(splitta))
    
    'Splitta il nome del file togliendo i punti per risalire all'estensione
    estensione = Split(nomefilesplittato, ".")
    
    'Inizio ciclo per splittare
    For i = 0 To UBound(estensione)
        estensione(i) = estensione(i)
    Next
    
    'Prendi l'ultimo indice dell'array estensionefile e passa il valore nella variabile
    estensionefile = estensione(UBound(estensione))
    'trovata l'estensione aggiungiamo il punto per il riconoscimento dell'estensione del file
    estensionefile = "." & estensionefile
    ed usare invece questa istruzione:
    codice:
    estensionefile = System.IO.Path.GetExtension(fileName)


  8. #8
    Utente di HTML.it L'avatar di Cimp
    Registrato dal
    Nov 2006
    Messaggi
    28
    vabbè, intanto bravo. Poi speriamo che qualcuno di quelli che fan fatica a "ricorrere" ringrazi.
    Poi, se proprio vuoi saperlo, allora eccoti i miei "2 cent":

    Trim(LCase(fileName))
    ...
    UCase(estensionefile)
    è più "Nettiano" usare
    codice:
    fileName.Trim().ToLower()
    ...
    estensionefile.ToUpper()
    Ma credo sia più importante questo:
    nel select case per l'estensione, MOV si ripete 3 volte, MP4 due;
    per evitare ripetizioni inutili (e forse anche per accelerare un pochino il codice) ti conviene scrivere i case raggruppando le istruzioni che producono lo stesso risultato, e mettendo prima quelli che hanno la maggior probabilità di verifiarsi (o quelli che si potrebbero incontrare più spesso). in alternativa, puoi sempre ordinarli per logica (da 1 a 9) se non temi tempi leggermente più lunghi
    codice:
    Case ".AVI"
    	coso = 1
    Case ".MKV",".MKA"
    	coso = 2
    Case ".MP4",".MOV",".MPA",".MP2"
                 coso = 9
    Case ".MPG", ".MPEG"
    	coso = 4
    Case ".DIVX", ".IFO"
    	coso = 6
    Case ".WMV"
    	coso = 7
    Case ".VOB"
    	coso = 8
    Case ".TS"
    	coso = 5
    
    Case Else
    	coso = 0

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Cimp
    vabbè, intanto bravo. Poi speriamo che qualcuno di quelli che fan fatica a "ricorrere" ringrazi.
    Poi, se proprio vuoi saperlo, allora eccoti i miei "2 cent":
    Non volevo infierire troppo...
    Concordo, ovviamente.


  10. #10
    Grazie per i vostri consigli.... Mi son messo sotto per ottimizzare il codice ancor di più ed ho seguito i vostri consigli!!
    Dovete considerare che ho iniziato vb.net da una settimana....

    codice:
     Public Sub ProcessDir(ByVal Dir As String)
    
    
            Dim coso As Integer = -1
    
            ' Aumenta ad ogni ciclo di funzione la ProgressBar
            ProgressBar1.Value = ProgressBar1.Value + 10
    
            'Azzera la ProgressBar
            If ProgressBar1.Value = 10000 Then ProgressBar1.Value = 0
    
            ' Processa la lista dei files trovati nella directory passata
            Try 'Controllo di errori
    
                For Each fileName As String In Directory.GetFiles(Dir)
                    ' Controlla se è stato trovato almeno un file e se l'icona non è uguale a 0 e lo aggiunge alla listView
                    If ((System.IO.Path.GetFileNameWithoutExtension(fileName).ToLower().IndexOf(textcerca.Text.Trim().ToLower()) <> -1)) Then
                        ' contralla l'estensione del file e applica un icona
                        Select Case System.IO.Path.GetExtension(fileName).ToUpper()
    
                            Case ".AVI"
                                coso = 1
                            Case ".MKV", ".MKA"
                                coso = 2
                            Case ".MP4", ".MOV", ".MPA", ".MP2"
                                coso = 9
                            Case ".MPG", ".MPEG"
                                coso = 4
                            Case ".DIVX", ".IFO"
                                coso = 6
                            Case ".WMV"
                                coso = 7
                            Case ".VOB"
                                coso = 8
                            Case ".TS"
                                coso = 5
    
                            Case Else
                                coso = 0
    
                        End Select
    
                        If Not (coso = 0) Then
                            ListView2.Enabled = True
                            ListView2.Items.Add(New ListViewItem(fileName.ToString, coso))
                            ' Aggiorna ListView
                            ListView2.Refresh()
                            ProgressBar1.Value = 0
                        End If
    
                    End If
    
                Next
    
                ' Processa tutte le directory trovate nella directory passata alla funzione
    
    
    
                For Each subdirectory As String In Directory.GetDirectories(Dir)
    
                    ProcessDir(subdirectory)
    
                Next
    
                ' Se trova un errore saltalo e continua il processo e azzera la ProgressBar
            Catch ex As Exception
                ProgressBar1.Value = 0
            End Try
        End Sub

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.