VB.NET - Arquivos e diretórios


 

As classes  Directory e File contém métodos estáticos que definem ou retornam informação sobre entradas no sistema de arquivo.

 

Diretórios e Arquivos

 

Graças aos métodos GetDirectories e GetFiles você precisa de poucas linhas de código para interagir sobre todos os diretórios e arquivos da árvore de diretório.

 

O no exemplo de código a seguir estamos exibindo a estrutura da árvore de diretório e os nomes dos arquivos em cada pasta (opcional)

 

Private Sub exibeArvoreDiretorio(ByVal dir As String, ByVal exibeArquivos As Boolean, Optional ByVal nivel As Integer = 0)
        ' Exibe o nome da pasta com a identação correta
        lstDiretorios.Items.Add(New String("-"c, nivel * 2) & dir)
        Try
            ' Exibe todos os arquivos na pasta com a identanção correta
            If exibeArquivos Then
                For Each nome As String In Directory.GetFiles(dir)
                    lstDiretorios.Items.Add(New String(" "c, nivel * 2 + 2) & nome)
                Next
            End If
            ' Uma chamada recursiva para exibir todos os subdiretorios da pasta
            For Each subdir As String In Directory.GetDirectories(dir)
                exibeArvoreDiretorio(subdir, exibeArquivos, nivel + 1)
            Next
        Catch 
               Throw New Exception("ocorreu um erro")    
        End Try
    End Sub

 

 

Como exemplo de utilização da rotina acima podemos fazer a seguinte chamada : exibeArvoreDiretorio("d:\aspnet", True, 2) que tem como resultado a figura abaixo:

 

 

Você pode passar o nome do diretório para a rotina exibeArvoreDiretorio ou mesmo exibir a árvore de diretório de todos os drives no seu sistema usando o método GetLogicalDrives do tipo Directory:

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'A execução desta operação pode demorar um longo tempo
For Each rootDir As String In Directory.GetLogicalDrives()
   exibeArvoreDiretorio(rootDir, True)
Next

End Sub

 

O exemplo a seguir exibe os arquivos com extensão definida em uma pasta do sistema de arquivos:

 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

' exibe todos os arquivos em uma pasta especifica
If Not txtPasta.Text = String.Empty Or Not txtArquivos.Text = String.Empty
Then

   For Each nome As String In Directory.GetFiles(txtPasta.Text, txtArquivos.Text)
       lstDiretorios.Items.Add(nome)

  Next

End If
End
Sub

 

No VB2005 os métodos GetFiles e GetDirectories agora podem procurar automaticamente nos subdiretórios. Por exemplo o código a seguir exibe todas as DLLs na pasta d:\windows;

 

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

For Each arquivo As String In Directory.GetFiles("d:\windows", "*.dll", SearchOption.AllDirectories)

     lstDiretorios.Items.Add((arquivo)

Next
End
Sub

O VB .NET apresenta também 3 novos método para a classe File.

1- O método Replace realiza uma operação de mover e copiar com um comando único - isto cria uma cópia  de segurança do arquivo de destino e então copia o arquivo fonte para o arquivo de destino. Você pode usar também o argumento opcional que se for definido como True faz com que qualquer erro que possa ocorrer seja ignorado:

Exemplo: O exemplo a seguir faz o backup do conteúdo atual de c:\data.mdf em c:\data.bak, e então ' copia o conteúdo de c:\novodata.mdf para c:\data.mdf.

File.Replace("d:\data.mdf", "c:\novodata.mdf", "c:\data.bak", True)

2- O novo método Encrypt efetua a criptografia de um arquivo em uma partição do sistema NTFS de forma que ele somente pode ser lido pelo usuário atual. O processo pode ser revertido pelo método Decrypt:

a- Cifrar - File.Encrypt("c:\teste\dados.txt")

b- Reverter : File.Decrypt("c:\teste\dados.txt")

As operações de leitura e gravação usando a classe File agora realizam operações de leitura e gravação atômicas em arquivos textos e binários de uma forma muito simples:

- Você pode ser um arquivo de texto inteiro usando o método ReadAllText e gravar o arquivo inteiro usando o método WriteAllText

Ex:Lê um arquivo texto , converte o conteúdo para caixa alta e salva em outro arquivo:

Dim texto As String = File.ReadAllText("c:\teste.txt")
File.WriteAllText("c:\teste2.txt", texto.ToUpper())

Você também pode ler e escrever usando um array de strings por meio dos métodos ReadAllLines e WriteAllLines:

Exemplo:
' Lê o arquivo fonte para um array de strings
Dim linhas() As String = File.ReadAlllinhas("c:\fonte.txt")
Dim contador As Integer = 0

' Exclui linhas vazias , movendo as linhas não vazias para o indice mais inferior
For i As Integer = 0 To linhas.Length - 1

      If linhas(i).Trim.Length > 0 Then
           linhas(contador) = linhas(i)
           contador+= 1
      End
If

Next

' Elimina as linhas excedentes e grava para o arquivo de destino
ReDim Preserve linhas(contador- 1)
File.WriteAllLines("c:\destino.txt", linhas)

.

O método AppendAllText anexa uma string para um arquivo texto existente ou cria um arquivo texto se ele não existir ainda:

Exemplo: Anexa uma mensagem ao arquivo de log criar o arquivo se for preciso:
 
Dim msg As String = String.Format("Aplicação iniciada as {0}{1}", Now, ControlChars.CrLf)

File.AppendAllText("c:\log.txt", msg)
 

Para efetuar o mesmo tratamento com arquivos binários temos os métodos ReadAllBytes e WriteAllBytes:
 
' Efetuando a cifragem de um arquivo binário
Dim bytes() As Byte = File.ReadAllBytes("c:\fonte.dat")

' Troca o bit em cada byte
For i As Integer = 0 To bytes.Length - 1
    bytes(i) = bytes(i) Xor CByte(&H55)
Next

' Escreve para um arquivo diferente

File.WriteAllBytes("c:\destino.dat", bytes)

Em um próximo artigo estarei falando do novo recurso do VB .NET : o suporte para ler e modificar a lista de controle de acesso do Windows (ACLs) a partir de código gerenciado sem ter que efetuar chamadas a API do Windows.

Aguarde em breve mais artigos sobre os novos recursos VB.NET. Até breve...
 
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