Visual Basic - Operações com arquivos e diretórios


Neste artigo veremos as principais operações com arquivos usando a linguagem Visual Basic

Copiando arquivos
Renomeando arquivos
Excluindo arquivos
Movendo arquivos
Criando um diretório (Pasta)
Removendo um diretório (Pasta)
Movendo um diretório (Pasta)
Mudando o drive e o diretório atual
Exibindo o drive e o diretorio atual
Verificando se um arquivo existe


No artigo Usando o File System Object - FSO - Tratando arquivos e diretórios mostramos como podemos realizar operações e obter informações sobre arquivos e diretórios.

Para utilizar o objeto FSO voce precisar ter o VB6 e estar familiarizado com o novo objeto FSO .

Tá com preguiça !!!!

Bem , o VB oferece uma outra alternativa para realizar essas operações (embora esteja ultrapassada) : Os bons e velhos comandos do BASIC ...

Vamos mostrar neste artigo como fazer o serviço. Ao código...

Copiando Arquivos

Para copiar arquivos podemos usar o comando - FileCopy. Cuja sintaxe é:

FileCopy fonte, destino

Fonte - é o nome do arquivo que desejamos copiar

Destino - é o nome do arquivo para o qual vamos copiar.

Exemplo :

FileCopy "arq1.txt", "arq2.txt"

Neste exemplo o arquivo arq1.txt é copiado do diretório atual com o nome de arq2.txt para o mesmo diretório.

Você pode especificar a localização dos arquivos informando o drive e o diretório para o fonte e o destino. Assim:

FileCopy "c:\teste\arq1.txt", "c:\windows\arq2.txt"

Aqui o arquivo arq1.txt é copiado do diretório c:\teste para o diretório c:\windows com o nome de arq2.txt

Se o arquivo fonte , arq1.txt , não for localizado ou estiver aberto , o VB retorna uma mensagem de erro:

Usando o tratamento de erros podemos contornar a situação , como o exemplo a seguir:

Formulário do projeto Mensagem de erro mais amigável

O código do botão Iniciar copia é o seguinte

Private Sub Command1_Click()
  
  On Error GoTo trata_erro
  
  CopyFile Text1.Text , Text2.Text
  MsgBox "Arquivo =>   " & Text1.Text & "  Copiado como  =>   " & Text2.Text, vbOKOnly
  
  Exit Sub
  
trata_erro:
  
  If Err.Number = 53 Then
     MsgBox "O arquivo  " & Text1.Text & "  nao foi localizado ! ", , "Usando FileCopy"
  ElseIf Err.Number = 58 Then
     MsgBox "O arquivo  " & Text2.Text & "  já existe !!", , "Usando FileCopy"
  Else
     MsgBox "Ocorreu o erro : " & Err.Number & " - " & Err.Description
  End If
  
End Sub

Que tal usar a caixa de dialogo da cópia do Explorer durante a copia dos arquivos mostrando a progressão da mesma ? (figura a seguir)

Como isto foge um pouco do nosso assunto clique no link a seguir para ver a dica de como fazer isto : Usando a Caixa de Diálogo de Cópia do Explorer.

Renomeando arquivos

Para renomear arquivos usamos o comando Name , com a seguinte sintaxe:

Name nomeantigo As novonome

nomeantigo - Refere-se ao nome do arquivo existente que desejamos renomear

novonome - Refere-se ao novo nome que desejamos atribuir ao arquivo.

Usando Name podemos renomear e mover o arquivo para outro diretório , mas não podemos criar um novo arquivo , diretório ou pasta.

Se o arquivo origem não for localizado ou estiver aberto o VB retorna uma mensagem de erro identica a que ocorre quando estamos copiando um arquivo.

Exemplo:

Name "c:\teste\arq1.txt" As "c:\windows\arq2.txt"

Renomeia e move o arquivo arq1.txt localizado em c:\teste para o diretório c:\windows com o nome de arq2.txt

Podemos usar o mesmo formulário que o exemplo anterior - Copiando arquivos . O código seria o seguinte:

Private Sub Command1_Click()
  
  On Error GoTo trata_erro
  
  Name Text1.Text As Text2.Text
  MsgBox "Arquivo =>   " & Text1.Text & "  Renomeado como  =>   " & Text2.Text, vbOKOnly
  
  Exit Sub
  
trata_erro:
  
  If Err.Number = 53 Then
     MsgBox "O arquivo  " & Text1.Text & "  nao foi localizado ! ", , "Usando Name"
  ElseIf Err.Number = 58 Then
     MsgBox "O arquivo  " & Text2.Text & "  já existe !!", , "Usando Name"
  Else
     MsgBox "Ocorreu o erro : " & Err.Number & " - " & Err.Description
  End If
  
End Sub		
 
Excluindo arquivos

Para excluir arquivos usamos o comando Kill , com a sintaxe:

Kill caminhonomedoarquivo

caminhonomedoarquivo - Refere-se a localização e o nome do arquivo que desejamos deletar.

O comando Kill suporta a utilização de máscaras como: * e ?. Assim podemos excluir varios arquivos de uma vez.

Exemplo:

Kill c:\teste\arq1.txt

Exclui o arquivo arq1.txt do diretório c:\teste

Kill *.txt

Exclui todos os arquivos com extensão txt do diretório atual.

Muito cuidado ao usar Kill , pois ele literalmente 'mata' o seu arquivo , e não há como reverter a operação. (Os arquivos excluidos com Kill não vão para lixeira.)

Movendo arquivos

Para mover arquivos no VB usamos ou o comando Name ou uma combinação dos comandos FileCopy e Kill.

Assim para mover o arquivo arq1.txt do diretorio c:\windows para o diretório c:\teste podemos fazer:

FileCopy "c:\windows\arq1.txt", "c:\teste\arq1.txt"

Kill "c:\windows\arq1.txt"

ou

Name "c:\windows\arq1.txt" AS "c:\teste\arq1.txt"

Em todas as operações com arquivos vistas até aqui o VB não fornece nenhuma mensagem se a operação foi bem sucedida.

Criando um diretório ( Pasta )

Para criar um dirétório usamos o comando MkDir , com a sintaxe:

MkDir caminhonomedapasta

caminhonomedapasta - Deve ser informado o caminho e o nome do diretório a ser criado.

Se o caminho não for informado o diretório será criado dentro do diretório atual.

Exemplo:

MkDir "c:\teste\dir1"

Cria o diretório dir1 dentro do diretório teste no drive c:.

Se a operação falhar o VB informa com uma mensagem de erro. Se a operação for bem sucedida não há mensagem alguma.

Assim se voce tentar criar um diretório que já existe ou se tentar criar um diretório em um diretório pai que não existe , obterá as seguintes mensagens de erro:

Erro quando o diretório já existe Erro quando o diretório pai não existe
   
Removendo um diretório ( Pasta )

Para remover um dirétório usamos o comando RmDir , com a sintaxe:

RmDir caminhonomedapasta

caminhonomedapasta - Deve ser informado o caminho e o nome do diretório a ser removido.

Você não pode remover um diretório que contenha arquivos. Para remover o diretório devemos excluir todos os arquivos do mesmo usando o comando Kill visto anteriormente.

Exemplo:

RmDir "c:\teste"

Remove o diretório teste do drive c: ( se o mesmo estiver vazio )

Se o diretório a ser removido não existir ou se o diretório não estiver vazio teremos as seguintes mensagens de erro:

Erro quando o diretório não existe Erro quando o diretório não está vazio
   
Movendo um diretório ( Pasta )

Não existe um comando para remover diretórios no VB. Para fazer isto devemos combinar os comandos MkDir, CopyFile , Kill e RmDir para Criar um novo diretório , Copiar todos os arquivos do diretório origem para o novo diretório, Remover todos os arquivos do diretório origem e Remover o diretório origem.

Exemplo: Suponha que desejamos mover o diretório c:\teste para dentro do diretório c:\windows ( c:\teste não está vazio.) Vejamos os passos:

1- Criar o diretório em c:\windows - Mkdir "c:\windows\teste"
2- Copiar cada arquivo em c:\teste para
c:\windows\teste - Filecopy "c:\teste\arquivo1", "c:\windows\teste\arquivo1"
3- Remover todos os arquivos em c:\teste - Kill "c:\teste\*.*"
4- Excluir o diretório c:\teste - RmDir "c:\teste"

ou podemos usar o comando Name como a seguir:

Name "c:\teste" As "c:\windows\teste"

O diretório c:\teste e todo o seu conteúdo será movido para a pasta c:\windows.

Exibindo o diretório e drive atual

Para exibir o diretório atual usamos o comando CurDir, com a seguinte Sintaxe.

CurDir[(drive)]

drive - Indica um drive existente. Se nada for informado ou se for informado uma string vazia ( "") o comando retorna o caminho para drive atual.

Exemplo:
Supondo que:
O caminho atual é "C:\WINDOWS\SYSTEM" .
O caminho atual para o drive D: é "D:\EXCEL".
O drive atual é C:
iremos obter :

Dim caminho
caminho = CurDir        ' Retorna "C:\WINDOWS\SYSTEM".
caminho = CurDir("C")   ' Retorna "C:\WINDOWS\SYSTEM".
caminho = CurDir("D")   ' Retorna "D:\EXCEL".
Mudando o drive atual

Para mudar o drive atual usamos o comando ChDrive, com a seguinte Sintaxe.

ChDrive drive

drive - Indica um drive existente. Se for informado uma string vazia ( "") o drive não muda.

Exemplo:

ChDrive "D"

Torna o drive D: o drive atual

Mudando o diretório atual

Para mudar o diretório atual usamos o comando ChDir, com a seguinte Sintaxe.

ChDir caminho

caminho - Indica o nome do diretório ou pasta que se tornará o diretório ou pasta padrão.Se o drive nao for informado o comando irá mudar o diretorio no drive atual.

Exemplo:

ChDir "c:\teste"

Torna o diretórioi c:\teste o diretório padrão atual.

ChDir muda o diretório padrão mas não o drive padrão. Portanto se o drive padrão for C, o exemplo a seguir muda o diretório padrão no drive D , mas o drive C continua o drive padrão:

ChDir "D:\teste"   

Para alterar o drive e diretório padrão fazermos:

ChDrive ("d")

ChDir "\teste"

MsgBox "O diretório atual é " & CurDir

Verificando se um arquivo existe

Para verificar se um arquivo existe podemos usar a função Dir , com a seguinte sintaxe:

Dir[(caminho[, atributos])]

caminho - Indica o nome do arquivo que desejamos verificar a existência. Pode incluir o drive e o diretório. Se o arquivo nao for encontrado uma string vazia ("") será retornada.

atributos - É opcional e especifica o atributo do arquivo a ser encontrado. Se for omitido os arquivos retornados serão os que atendam a condição e que não possuam atributo.

Os possíveis atributos são:

Constante Valor Descrição
vbNormal 0 (Padrão) Indica arquivos sem atributo.
vbReadOnly 1 Indica arquivos somente leitura e arquivos que nao possuem atributos.
vbHidden 2 Indica arquivos ocultos em adição a arquivos sem atributos..
VbSystem 4 Indica arquivos de sistema e arquivos sem atributos..
vbVolume 8 Indica o nome do volume.
vbDirectory 16 Indica diretórios e pastas em adição a arquivos sem atributos..

Note    A função Dir suporta o uso de coringas tais como; * e ? .

Exemplo1:

Dim retval As String

retval = Dir("c:\teste\arq1.txt")

If retval = "arq1.txt" Then
   MsgBox "arq1.txt existe."
End If

End Sub

Exemplo2:

Dim MeuFile
' Retorna "WIN.INI"  
MeuFile = Dir("C:\WINDOWS\WIN.INI")   

' Ao usarmos o coringa *.ini
' Retorna o primeira arquivo encontrado que atenda a condição
MeuFile = Dir("C:\WINDOWS\*.INI")

' Se chamar a funçãoDir novamente sem argumentos iremos obter o proximo arquivo  
' com extensão *.INI no mesmo diretório
MeuFile = Dir

' Retorna o primeiro arquivo com extensão  *.TXT com o atributo de oculto(hidden)
MeuFile = Dir("*.TXT", vbHidden)

Creio que tudo ficou esclarecido , mesmo por que , o que foi abordado são conceitos básicos e de simples assimilação. Se você já conhece tudo o que foi exposto lembre-se que para quem esta começando agora tudo é novidade, e, um dos meus objetivos é justamente ajudar os novatos.

Referências:


José Carlos Macoratti