VB .NET - Pesquisando Drivers, Diretórios e Arquivos
Neste artigo eu vou mostrar como podemos pesquisar os drivers do sistema, seus respectivos diretórios e arquivos usando a linguagem VB .NET em uma aplicação Windows Forms. |
O Visual Basic 6 já teve o seu momento de glória e já cumpriu o seu papel.
Deixando toda a polêmica de lado, o VB6 trazia recursos que facilitava muito a
vida do desenvolvedor de aplicações para Windows.
Um exemplo prático são os controles DriveListBox, DirListBox e FileListBox para tratar drivers, diretórios e arquivos. Vamos lembrar o que faz cada um deles:
DriveListBox - Exibe todos os drivers do seu computador;
DirListBox - Exibe todos os subdiretórios de um dado diretório;
FileListBox - Exibe os arquivos de um diretório particular;
Usando os 3 controles em conjunto podemos criar um pequeno projeto para localizar arquivos em um determinado diretório e em um determinado drive de maneira bem simples usando somente 3 linhas de código.
Veja abaixo a figura desse projeto feito a título de ilustração no Visual Basic 6 à sua esquerda e na imagem à direita o projeto em execução:
O velho e bom Visual Basic 6 dava conta do recado...
Nota: No VB6 podíamos usar também o objeto
FileSystemObject para tratar arquivos, pastas e drives.
Mas porque eu estou falando tudo isso em um artigo que trata do VB .NET ?
No VB .NET esses controles não estão disponíveis e neste artigo eu vou mostrar como podemos obter o mesmo resultado usando pouco código (não tanto como no VB6).
Recursos usados:
Criando o projeto no Visual Studio 2013 Express for windows desktop
Abra o VS 2013 Express for windows desktop e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application;
Informe o nome Driver_Diretorio_Arquivos e clique no botão OK;
No formulário form1.vb criado por padrão no projeto vamos incluir a partir da ToolBox os seguintes controles:
1 GroupBox - Text = Drivers, Diretórios e Arquivos
1 ListBox - Name = lbDrivers
1 ListBox - Name = lbDiretorios
1 ListBox - Name = lbArquivos
Disponha os controles conforme o leiaute da figura abaixo:
Agora vamos definir o código do formulário iniciando com a declaração do namespace System.IO no início do formulário:
Imports
System.IOAgora no evento Load do formulário form1.vb vamos definir o código abaixo:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each drv As DriveInfo In DriveInfo.GetDrives
lbDrives.Items.Add(drv)
Next
End Sub
|
O código utiliza um laço for each para percorrer os drivers do sistema obtidos pelo método GetDrivers da classe DriveInfo. Essa classe fornece acesso a informações em uma unidade.
Cada drive é então exibido no controle ListBox - lbDrives.
Vamos então usar o evento SelectedIndexChanged do controle lbDrives para que quando houver qualquer alteração na seleção do drive possamos obter informações dos diretórios existentes no drive selecionado.
Para isso vamos incluir o código a seguir neste evento:
Private Sub lbDrives_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lbDrives.SelectedIndexChanged
lbDiretorios.Items.Clear()
Try
Dim drv As DriveInfo = DirectCast(lbDrives.SelectedItem, DriveInfo)
For Each dirinfo As DirectoryInfo In drv.RootDirectory.GetDirectories
lbDiretorios.Items.Add(dirinfo)
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
A primeira linha de código do evento limpa os itens da listbox.
A seguir obtemos a informação do drive selecionado a partir da classe DriveInfo. Para isso temos que usar o operador DirectCast para converter o drive selecionado para o tipo DriveInfo.
Lembrando que DirectCast requer que o tipo em tempo de execução de uma variável objeto seja o mesmo que o tipo especificado para conversão. Se o tipo definido e o tipo da expressão em tempo de execução forem o mesmo , o desempenho de DirectCast é melhor do que o de Ctype.
Então , se você tem certeza de que a expressão é do mesmo tipo para o qual a conversão vai ser realizada use DirectCast ; se tiver dúvidas use Ctype.
Após obter o drive usamos um
laço for each para percorrer os diretórios
obtidos pelo método GetDirectories da propriedade RootDirectory.
Essa propriedade obtém o diret
Os diretórios são então exibidos no controle ListBox - lbDiretorios.
Usando o mesmo raciocínio vamos usar o evento SelectedIndexChanged do controle lbDiretorios de forma a obter os arquivos de um diretório selecionado quando ocorrer alteração na seleção do diretório no controle lbDiretorios.
Inclua então o código abaixo neste evento:
Private Sub lbDiretorios_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lbDiretorios.SelectedIndexChanged
lbArquivos.Items.Clear()
Try
Dim dir As DirectoryInfo = DirectCast(lbDiretorios.SelectedItem, DirectoryInfo)
For Each arq As FileInfo In dir.GetFiles
lbArquivos.Items.Add(arq)
Next
Catch unex As UnauthorizedAccessException
MessageBox.Show("Acesso não autorizado")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
A primeira linha de código do evento limpa os itens da listbox.
A seguir obtemos a informação do diretório selecionado a partir da classes DirectoryInfo. Para isso temos que usar o operador DirectCast para converter o diretório selecionado para o tipo DirectoryInfo.
Após obter o diretório usamos um laço for each para percorrer os arquivos obtidos pelo método GetFiles da classe DirectoryInfo.
Os diretórios são então exibidos no controle ListBox - lbArquivos.
Aqui estou tratando a exceção UnauthorizedAccessException para casos de falta de autorização de acesso a um diretório.
Executando o projeto iremos obter o seguinte resultado:
Eu fui muito minimalista neste projeto pois o meu objetivo era obter o mesmo resultado que o VB6. Você pode incluir mais funcionalidades nele.
Pegue o projeto completo aqui: Drive_Diretorio_Arquivos.zip
E
Deus limpará de seus olhos toda a lágrima; e não haverá mais morte, nem pranto,
nem clamor, nem dor; porque já as primeiras coisas são passadas.
Apocalipse 21:4
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
FSO - Tratando drives, diretórios e arquivos - Macoratti.net