VB .NET -  Acessando diretórios e arquivos (revisão)


 No artigo de hoje vamos recordar como acessar arquivos usando os recursos da linguagem VB .NET.

O VB.NET permite que o tratamento de arquivos possa ser feito de uma centena de formas diferentes , e, isto pode causar uma certa confusão. Podemos dividir as alternativas em três categorias :

  1. Os métodos fornecidos pelo VB.NET em tempo de execução
  2. O FileSystemObject (lembra dele)
  3. Os métodos oferecidos pela CLR - Common Language Runtime

Então qual o melhor caminho ?

A resposta a essa pergunta vai depender de diversos fatores.

Com o tempo vamos adquirindo experiência e saberemos qual o melhor alternativa usar.

Neste artigo eu vou tratar basicamente da classe Directory do namespace System.IO, mais especificamente dos métodos GetFiles e GetDirectories.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no Visual Studio 2015 Community

Abra o VS 2015 Community e clique em New Project;

Selecione Other Project Types -> Visual Studio Solutions -> Blank Solution;

Informe o nome VBNET_Arquivos e clique no botão OK;

A seguir a partir da ToolBox inclua no formulário form1.vb os seguintes controles :

Disponha os controles conforme o leiaute da figura abaixo:

Defina os seguintes namespaces usados no formulário:

Imports System.IO
Imports System.IO.Directory

Agora no evento click do botão - Listar Diretórios - vamos incluir o código abaixo que lista os diretórios conforme as definições dos critérios usando o método GetDirectories da classe Directory.

Private Sub btnListarDiretorios_Click(sender As Object, e As EventArgs) Handles btnListarDiretorios.Click
        'limpa o listbox
        lbDiretorios.Items.Clear()
        Try
            'define o diretorio raiz
            Dim raiz As String = IIf(txtDiretorioRaiz.Text = String.Empty, "c:\", txtDiretorioRaiz.Text)
            'define o critério para o nome dos diretorios
            Dim criterio As String = IIf(txtCriterioDiretorio.Text = String.Empty, "*", txtCriterioDiretorio.Text)
            'obtem os diretórios conforme os critérios acima 
            For Each Dir As String In GetDirectories(raiz, criterio, IIf(chkOpcao.Checked, SearchOption.AllDirectories, SearchOption.TopDirectoryOnly))
                lbDiretorios.Items.Add(Dir)
            Next
            'exibe a quantidade de diretórios
            lblDiretorios.Text = lbDiretorios.Items.Count.ToString + " Diretórios encontrados."
            'habilita o botão para listar arquivos
            btnListarArquivos.Enabled = True
        Catch ex As Exception
            MessageBox.Show("Erro " + ex.Message)
        End Try
    End Sub

O código esta comentado e não necessita mais detalhes. Vale apenas citar a sintaxe do método GetDirectories:

Public Shared Function GetDirectories ( path As String, searchPattern As String ) As String()

Onde :

path - Indica o caminho absoluto ou relativo do diretório a procurar.
searchPattern -  Representa a cadeia de caracteres de pesquisa para correspondência com os nomes dos arquivos em path. Esse parâmetro pode conter uma combinação de caminho literal válido e o caractere curinga (* e ?) , mas não oferece suporte a expressões regulares.

Obs: searchPattern pode ser uma combinação de um curinga e de caracteres literais, mas não oferece suporte a expressões regulares.

Os seguintes especificadores de curinga são permitidos em searchPattern:

Especificador de curinga Correspondências
 *  (asterisco) Zero ou mais caracteres naquela posição.
 ? (ponto de interrogação) Zero ou um caractere na posição.

A seguir inclua no evento Click do botão de comando  - Listar Arquivos - o código que lista os arquivos do diretório selecionado usando os métodos GetFiles() da classe Directory e GetFileName() da classe Path.

 Private Sub btnListarArquivos_Click(sender As Object, e As EventArgs) Handles btnListarArquivos.Click
        'limpa o listbox
        lbArquivos.Items.Clear()
        'verifica se um diretório foi selecionado ou não
        If Not lbDiretorios.SelectedItem = Nothing Then
            Try
                'define o critério para o nome dos arquivos
                Dim criterio As String = IIf(txtCriterioArquivo.Text = String.Empty, "*", txtCriterioArquivo.Text)
                ' obtem os arquivos do diretorio selecioonado conforme o critério
                ' lista apenas os nomes dos arquivos usando uma expressão lambada e o método GetFileName
                Dim arquivos = GetFiles(lbDiretorios.SelectedItem, criterio).Select(Function(arq) Path.GetFileName(arq))
                'verifica se existem arquivos encontrados
                If arquivos.Count > 0 Then
                    'percorre e exibe os nomes dos arquivos
                    For Each nomeArquivo As String In arquivos
                        lbArquivos.Items.Add(nomeArquivo)
                    Next
                    'exibe a quantidade de arquivos
                    lbArquivos.Text = lbArquivos.Items.Count.ToString + " Arquivos encontrados."
                Else
                    lbArquivos.Items.Add("Nenhum arquivo encontrado")
                End If
            Catch ex As Exception
                MessageBox.Show("Erro " + ex.Message)
            End Try
        Else
            MessageBox.Show("Selecione o diretório desejado.")
        End If
    End Sub

Neste código vale destacar a expressão lambda usada na linha de código abaixo para obter o nome dos arquivos:

Dim arquivos = GetFiles(lbDiretorios.SelectedItem, criterio).Select(Function(arq) Path.GetFileName(arq))

As expressões lambdas são funções ou sub-rotinas que podem conter expressões e declarações que são usadas para criar delegates e árvores de expressões onde o tipo das variáveis não precisam ser declarados visto que elas usam métodos anônimos.

Desta forma podemos declarar a expressão lambda e chamar a função passando um valor ao parâmetro. Você cria uma expressão lambda usando as palavras reservadas Sub ou Function.

Você também pode declarar e chamar uma expressão lambda ao mesmo tempo, como mostrado no código acima onde usamos o método de extensão Select usando a expressão lambda.

Executando o projeto e definindo algumas opções iremos obter o seguinte resultado:

Pegue o projeto completo aqui : VBNET_Arquivos.zip

Deitar-me faz em verdes pastos, guia-me mansamente a águas tranqüilas.Refrigera a minha alma; guia-me pelas veredas da justiça, por amor do seu nome.
Salmos 23:2,3

  • 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 ?

    Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

     

      Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

     

    Referências:


    José Carlos Macoratti