VB .NET - Localizando arquivos locais por nome ou partes do nome

 Neste artigo vou mostrar como podemos localizar arquivos locais usando com critério a localização a sua extensão e o nome ou parte do nome do arquivo.


Neste artigo vou mostrar um exemplo prático bem simples onde vamos localizar arquivos pelo nome ou parte do nome em uma pasta e com uma extensão especificada.

Vou destacar as principais rotinas e eventos usados no projeto, que já estão comentadas.

Recursos Usados:

Criando o projeto no VS Community 2017

Abra no VS community 2017 e no menu File clique em New Project;

A seguir selecione o template Visual Basic -> Windows -> Windows Forms Application e informe o nome VbnEncontraArquivo e clique em OK;

Agora abra o formulário Form1.vb e inclua os seguintes controles no formulário:

Disponha os controles conforme o leiaute da figura abaixo:

Definindo o código do formulário

Inclua o seguinte namespace no formulário:

Imports System.IO

1- Código do botão de comando para selecionar o diretório de busca

No evento btnProcurarEm_Click temos o código que vai permitir ao usuário selecionar uma pasta onde a busca vai ser feita usando o FolderBrowserDialog:

  Private Sub btnProcurarEm_Click(sender As Object, e As EventArgs) Handles btnProcurarEm.Click
        'Define as propriedades do controle FolderBrowserDialog
        fbd1.Description = "Selecione uma pasta de origem da busca"
        fbd1.RootFolder = Environment.SpecialFolder.MyComputer
        fbd1.ShowNewFolderButton = True
        'Exibe a caixa de diálogo
        If fbd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            'Exibe a pasta selecionada
            txtOrigem.Text = fbd1.SelectedPath
        End If
    End Sub

2- Código do botão de comando Localizar

Neste código chamamos o método ProcuraArquivos() passando os parâmetros informados pelo usuário :

  Private Sub btnLocalizar_Click(sender As Object, e As EventArgs) Handles btnLocalizar.Click
        txtResultado.Text = ""
        'Permite no mínimo 3 caracteres
        If txtCriterio.Text.Length < 3 Then
            MsgBox("Informe no mínomo 3 caracteres")
            Return
        End If
        'verifica se os parâmteros foram informados
        If Not String.IsNullOrEmpty(txtOrigem.Text) Or String.IsNullOrEmpty(txtExtensao.Text) Or String.IsNullOrEmpty(txtCriterio.Text) Then
            'chama o método para procurar os arquivos
            ProcuraArquivos(txtOrigem.Text, txtExtensao.Text, txtCriterio.Text)
        Else
            MessageBox.Show("Defina a pasta incial de busca e/ou o padrão de arquivos", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

3- Código do método ProcuraArquivos()

Neste código invocamos o método LocalizaArquivos passando os parâmetros e  usando a enumeração SearchOption que especifica se deve pesquisar o diretório atual ou o diretório atual e todos os subdiretórios. 

A opção usada - TopDirectoryOnly - Inclui apenas o diretório atual em uma operação de pesquisa.

     ''' <summary>
    ''' Procura arquivos com base na pasta de origem , extensão 
    ''' </summary>
    ''' <param name="pastaOrigem"></param>
    ''' <param name="extensao"></param>
    ''' <param name="padrao"></param>
    Private Sub ProcuraArquivos(pastaOrigem As String, extensao As String, padrao As String)
        Try

            'Invoca o método LocalizaArquivos e recebe a lista de arquivos encontrada
            Dim resultado As List(Of FileInfo) = LocalizarArquivos(pastaOrigem, IO.SearchOption.TopDirectoryOnly, extensao, padrao)
            'percorre a lista de arquivos e exibe no textbox
            For Each arquivo As IO.FileInfo In resultado
                txtResultado.Text = txtResultado.Text & arquivo.Name & vbNewLine
            Next
            'exibe mensagem de arquivos encontrados
            MessageBox.Show("Foram encontrados " + resultado.Count.ToString + " arquivos.")
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

 

4 - Código do método LocalizarArquivos()

Neste código o método LocalizarArquivos usa o método GetFiles que retorna os nomes dos arquivos que atendem aos critérios especificados.

      Private Function LocalizarArquivos(ByVal diretorio As String,
                                                            ByVal recursive As SearchOption,
                                                            ByVal ext As String,
                                                            ByVal palavra_no_nome_do_arquivo As String) As List(Of IO.FileInfo)
        Return IO.Directory.GetFiles(diretorio, "*" & If(ext.StartsWith("*"), ext.Substring(1), ext), recursive) _
                                       .Where(Function(o) o.ToLower.Contains(palavra_no_nome_do_arquivo.ToLower)) _
                                       .Select(Function(p) New IO.FileInfo(p)).ToList
    End Function

Executando o projeto teremos o resultado a seguir:

Pegue o projeto completo aqui:   Vbn_EncontraArquivo.zip

"Se alguém me serve, siga-me, e onde eu estiver, ali estará também o meu servo. E, se alguém me servir, meu Pai o honrará. "
João 12:26

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti