VB 2005 - O básico sobre o tratamento de arquivos


Exibindo os drives existentes no seu computador

Como acessar a lista de drives disponíveis em seu ambiente de trabalho ?

Basta você usar a coleção My.Computer.FileSystem.Drives afim de enumerar através dos drives lógicos do seu ambiente.

Em um formulário com um ListBox o seguinte código inclui o nome de cada letra de drive disponível no sistema :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  For Each drive As IO. DriveInfo In My.Computer.
        FileSystem.Drives  ListBox1.Items.Add(drive)
  Next drive
End Sub

cada item incluído aparece como < X:\> onde X representa a letra do drive. O código acima inclui objetos completos do tipo System.IO.DriveInfo na lista.

Se você quer incluir os nomes dos drives use o seguinte código:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each drive As IO.DriveInfo In My.Computer.FileSystem.Drives
      ListBox1.Items.Add(drive.Name)
Next drive
End Sub

A coleção My.Computer.FileSystem.Drivers fornece acesso a detalhes sobre cada drive local e de rede anexado a estação de trabalho. Desde de que esta é uma coleção que expõe a interface IEnumerable você pode usá-la em uma instrução For/Each acessando cada objeto drive na coleção.

Abaixo temos algumas das propriedades do objeto System.IO.DriveInfo que podem ser úteis:

AvailableFreeSpace
Retorna o número de bytes livres disponíveis para o usuário atual no drive. Se o administrador  atribuiu cotas de disco no drive , esta quantidade pode ser menor que o total de espaço disponível.
 
DriveFormat
Retorna uma string indicando o tipo de arquivo de sistema. O tipos de arquivos de sistemas disponíveis no Windows incluem: NTFS, FAT, FAT32,e CDFS.
 
DriveType
Indica o tipo de drive através da enumeração System.IO.DriveType. Os tipos de drives mais comuns incluem: Fixed, Removable, and CDRom.
 
IsReady
Retorna um valor boleano que indica se o drive esta pronto ou não.
 
Name
Obtêm o nome do drive no formato : X:\
 
RootDirectory
Retorna o objeto System.IO.DirectoryInfo que refere-se ao diretório de maior nível no drive. Esta propriedade não será válida se a propriedade  DriveType for definida para NoRootDirectory.
 
TotalFreeSpace
Retorna o número livre de bytes disponível no drive. Esta propriedade não esta limitada a definição de cotas pelo administrador.
 
TotalSize
Retorna o número total de  bytes usados e não usados no drive.
 
VolumeLabel
Indica nome do volume atualmente atribuído ao drive. Se o drive suporta você pode alterar o nome do volume atribuindo um novo valor para esta propriedade.

O caminho de diretórios baseado no formato de nome usando URL contendo o prefixo, "file://"  não pode ser usado com este método ou com a maioria das restrições de segurança em My.Computer.FileSystem ; de fato o usuário atual pode prevenir o acesso a certas partes do sistema de arquivos.

Verificando se um diretório existe

Use o método My.Computer. FileSystem.DirectoryExists() para determinar se um diretório existe. Você deve informar o caminho do diretório no formato de uma string para efetuar a verificação;.

O método DirectoryExists() verifica se existe o diretório , e trabalha com 3 tipos de indicação de caminho de drives:

O código abaixo supõe que você tem um o formulário Windows com um botão de comando - Button1 - e uma caixa de texto - TextBox1- onde você deve informar o caminho do diretório a ser verificado.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Verificando um diretório valido
If (My.Computer.FileSystem.DirectoryExists(TextBox1.Text)) Then
      MsgBox("O diretório já existe.")
Else
      MsgBox("O diretório não existe ou é parte de um caminho inválido.") 
End If
End Sub

Criando um novo diretório

Use o método My.Computer.FileSystem. CreateDirectory() para criar um novo diretório. Você deve informar o caminho do novo diretório a ser criado no formato de uma string válida.

O método CreateDirectory aceita a informação de um caminho absoluto ou relativo no formato UNC ou no formato padrão (letra de drive) , mas não aceita o formato de URL : "file://" . Se o diretório não puder ser criado será gerado uma exceção.

Uma variação deste método pode ser encontrado através da função System.IO.Directory.CreateDirectory( ). Esta função retorna um objeto System.IO.DirectoryInfo para o novo diretório criado. Existe outra versão sobrecarregada desta classe que aceita definições de segurança para o novo diretório.

O código abaixo supõe que você tenha um formulário contendo um botão de comando - Button1 - e uma caixa de texto - TextBox1 . O usuário deve informar caminho do diretório e o

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' O usuário deve informar o caminho do diretório
If TextBox1.Text = String.Empty Or TextBox1.Text.Length < 3 Then
     MsgBox("Informe um caminho de diretório válido.")
     TextBox1.Focus()
     Exit Sub
End If
' cria o diretório solicitado pelo usuário.
If (My.Computer.FileSystem.DirectoryExists(TextBox1.Text)) Then
     MsgBox("O diretório ja existe")
Else
   Try
          My.Computer.FileSystem.CreateDirectory(TextBox1.Text)
         MsgBox("Diretório criado com sucesso.")
   Catch ex As Exception
        MsgBox("O diretório não pode ser criado devido ao seguinte erro:" & vbCrLf & vbCrLf & ex.Message)
   End Try
End If
End Sub

Copiando diretórios

O método My.Computer.FileSystem.CopyDirectory() copia o conteúdo de um diretório para outro local. A sintaxe básica é:

	My.Computer.FileSystem.CopyDirectory( DiretorioOrigem, DiretorioDestino)

O argumento DiretorioOrigem contém um caminho absoluto baseado no formato UNC ou no formato padrão (letra-drive) ou um caminho relativo baseado no diretório atual a partir do ponto de vista da aplicação.

O argumento DiretorioDestino contém também um caminho absoluto ou relativo.

Ex: My.Computer.FileSystem.CopyDirectory( "C:\Macoratti", "C:\Destino")

A duplicação do diretório origem é completa , criando cópias de todos os arquivos e diretórios subordinado em qualquer nível.

Se o diretório de destino não existir , o método CopyDirectory irá criá-lo, incluindo qualquer caminho componente não existente entre o raiz definido e o diretório final. Se o diretório de destino já existir , qualquer arquivo existente no destino se mantém intacto, e novos arquivos são copiados entre eles, resultando em um diretório de destino mesclado.

Se um dos arquivos a ser copiado já existir no destino , será gerada um exceção. Se você deseja sobrescrever qualquer arquivo que já exista no destino deve usar o argumento opcional overwrite definido com o valor true:

Ex:    My.Computer.FileSystem.CopyDirectory(  diretorioOrigem, diretorioDestino, True)

Uma variação de CopyDirectory usa um diferente conjunto de argumentos para controlar a exibição na tela e a notificação de status durante a cópia:

Ex: My.Computer.FileSystem.CopyDirectory(  sourceDirectory, destDirectory, showUI [, onUserCancel])
O argumento ShowUI aceita os seguintes valores para as enumerações Microsoft.VisualBasic.FileIO.UIOption :

UIOption.AllDialogs

Um diálogo de progresso animado aparece durante a copia do diretório para indicar o status atual de cada arquivo copiado.

UIOption.OnlyErrorDialogs

Somente aviso de mensagens de erros irão aparecer. (Este o valor padrão)

UICancelOption.DoNothing

O status na tela exibido durante a cópia inclui o botão Cancel. Se o usuário clicar no botão Cancela quando a opção DoNothing estiver ativa , o código chamando CopyDirectory não irá receber qualquer notificação que a cópia foi abortada pelo usuário.

 

UICancelOption.ThrowException

Se o usuário clicar no botão Cancel durante a cópia, neste caso , será gerada uma exceção  System.IOException que pode ser capturada pelo código.

Movendo diretórios

O método My.Computer.FileSystem.MoveDirectory() realoca o conteúdo de um diretório para outro local. A sintaxe básica é:

	My.Computer.FileSystem.MoveDirectory( DiretorioOrigem, DiretorioDestino)

O argumento DiretorioOrigem contém um caminho absoluto baseado no formato UNC ou no formato padrão (letra-drive) ou um caminho relativo baseado no diretório atual a partir do ponto de vista da aplicação.

O argumento DiretorioDestino contém também um caminho absoluto ou relativo.

Se o diretório de destino não existir , o método MoveDirectory irá criá-lo, incluindo qualquer caminho componente não existente entre o raiz definido e o diretório final.

A movimentação do diretório de origem é completa, sendo movido todos os arquivos e diretórios. Você pode mover um diretório para um drive lógico.

O método MoveDirectory cria o diretório de destino se o mesmo não existir. Se o destino já existir qualquer arquivo existente no destino permanece intacto, e os novos arquivos são movidos entre eles, resultando em um diretório de destino mesclado.

Ex:    My.Computer.FileSystem.CopyDirectory(  diretorioOrigem, diretorioDestino, True)

Se um dos arquivos a ser movido já existir no destino , será gerada um exceção. Se você deseja sobrescrever qualquer arquivo que já exista no destino deve usar o argumento opcional overwrite definido com o valor true:

Ex:    My.Computer.FileSystem.MoveDirectory(  diretorioOrigem, diretorioDestino, True)

Uma variação de MoveDirectory usa um diferente conjunto de argumentos para controlar a exibição na tela e a notificação de status durante a cópia:

Ex: My.Computer.FileSystem.MoveDirectory(  sourceDirectory, destDirectory, showUI [, onUserCancel])
O argumento ShowUI aceita os seguintes valores para as enumerações Microsoft.VisualBasic.FileIO.UIOption :

UIOption.AllDialogs

Um diálogo de progresso animado aparece durante a movimentação do diretório para indicar o status atual de cada arquivo movido.

UIOption.OnlyErrorDialogs

Somente aviso de mensagens de erros irão aparecer. (Este o valor padrão)

UICancelOption.DoNothing

O status na tela exibido durante a movimentação inclui o botão Cancel. Se o usuário clicar no botão Cancela quando a opção DoNothing estiver ativa , o código chamando CopyDirectory não irá receber qualquer notificação que a cópia foi abortada pelo usuário.

 

UICancelOption.ThrowException

Se o usuário clicar no botão Cancel durante a operação, neste caso , será gerada uma exceção  System.IOException que pode ser capturada pelo código.

Renomeando diretórios

O método My.Computer.FileSystem.RenameDirectory() altera o nome de um diretório. A sintaxe básica é:

	My.Computer.FileSystem.RenameDirectory( DiretorioOrigem, novoNome)

O argumento DiretorioOrigem contém um caminho absoluto baseado no formato UNC ou no formato padrão (letra-drive) ou um caminho relativo baseado no diretório atual a partir do ponto de vista da aplicação.

O argumento novoNome inclui somente o novo nome do diretório. Você não pode informar um caminho relativo ou absoluto para este argumento:

Ex: Uso correto:    My.Computer.FileSystem.MoveDirectory( "C:\Macoratti", "Imagens")

Ex: Uso INCORRETO:    My.Computer.FileSystem.MoveDirectory( "C:\Macoratti", "C:\Imagens") 

Se o diretório já existir com o nome informado, será gerada uma exceção mesmo se o diretório já existente estiver vazio.

O Visual Basic inclui a função intrínseca Rename() que também renomeia diretórios. Sua sintaxe é um pouco diferente pois o segundo argumento aceita também qualquer caminho válido:

Ex: Rename("C:\Macoratti", "Imagens")
Rename("C:\Macoratti", "
C:\Imagens")


Ambos os comandos acima vão funcionar.

A função Rename() também move um diretório para uma árvore de diretório existente :

	Rename("C:\Temp\Macoratti\Logs\", "C:\Temp\Teste\Logs")

Acabamos de ver um caso onde uma função antiga tem mais recursos que uma nova, por uma questão de consistência dê preferência ao método RenameDirectory( ).

Movendo e Copiando arquivos

Para mover um arquivo da sua localização atual para outra use o método My.Computer.FileSystem.MoveFile(), e para copiar um arquivo de um lugar para outro use o método My.Computer.FileSystem.CopyFile()

A sintaxe básica é a seguinte:

' ---- para mover um arquivo.
My.Computer.FileSystem.MoveFile(arquivoOrigem, arquivoDestino[, overwriteFlag])

' ---- para copiar um arquivo
My.Computer.FileSystem.CopyFile(arquivoOrigem, arquivoDestino[, overwriteFlag])


Como arquivoDestino é um nome de arquivo e não um nome de diretório , você pode efetivamente renomear o arquivo ao mesmo tempo que move ou copia o arquivo.

Quando estiver movendo o arquivo você pode manter o arquivo no mesmo diretório e apenas dar a ele um novo nome embora se você usar o método Renamefile() a operação será mais clara.

O atributo opcional overwriteFlag é um booleano que indica se qualquer arquivo existente no destino será substituído de forma transparente pelo arquivo origem. O valor padrão é False.

Criando arquivo temporário

Para criar um arquivo temporário na área do usuário atual use o método : My.Computer.FileSystem.GetTempFileName()

Ex:      Dim arqtemp As String = My.Computer.FileSystem.GetTempFileName( )

O nome do arquivo retornado representa um novo arquivo criado pelo método que possui tamanho de zero bytes.

Enviando um arquivo para a lixeira

Se você precisa deletar um arquivo ou enviar um arquivo para lixeira pode usar o método My.Computer.FileSystem.DeleteFile() para excluir permanentemente um arquivo. A sintaxe básica usada é:

Ex: My.Computer.FileSystem.DeleteFile(filePath , showUI [, recycle [, onUserCancel]]] )

Para enviar o arquivo para a lixeira do Windows você deve definir o argumento opcional de forma adequada:

Ex::    My.Computer.FileSystem.DeleteFile(filePath, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin)

O primeiro argumento do método aceita um único arquivo a ser excluído, e você pode incluir até três argumentos opcionais:

- showUI - que impacta a apresentação do usuário durante a exclusão
- recycle - que indica se a lixeira vai ser usada ou não.
- onUserCancel - que define o que irá acontecer quando o usuário aborta a exclusão do arquivo.

- showUI aceita um dos seguintes valores de enumeração Microsoft.VisualBasic.FileIO.UIOption

UIOption.AllDialogs

Um diálogo de progresso animado aparece durante a exclusão do arquivo para indicar o estado atual durante a operação.


UIOption.OnlyErrorDialogs

È o valor padrão e não exibe animação de estado.

        O argumento recycle aceita um dos seguintes parâmetros dos seguintes valores da enumeração Microsoft.VisualBasic.FileIO.RecycleOption :

RecycleOption.DeletePermanently

O arquivo é imediatamente e permanentemente removido do disco.

 

RecycleOption.SendToRecycleBin

O método DeleteFIle() Move o arquivo para o pseudo-diretório Lixeira.

        Se você incluir o argumento onUserCancel ,  você pode fornecer os seguintes valores da enumeração Microsoft.VisualBasic.UICancelOption:

UICancelOption.DoNothing

A exibição do estado na tela durante a exclusão exibe um botão para cancelar a operação.Se o usuário clicar no botão Cancela quando a opção  DoNothing esta em efeito , a chamada do método DeleteFile( ) não receberá aviso que a exclusão foi abortada.

 

UICancelOption.ThrowException

Gera uma exceção  do tipo System.IOException a qual pode ser capturada no código.

Determinando se um arquivo existe

Use o método My.Computer.FileSystem.FileExists() para determinar se um caminho informado é um arquivo válido:

If (My.Computer.FileSystem.FileExists("d:\teste\Macoratti") = True) Then
   MsgBox("Arquivo inválido.")
Else
  Processa o arquivo               
End If
 

Veja o mesmo assunto tratado nos seguintes artigos:

Até o próximo artigo VB.NET...

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

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti