Usando o FileSystemObject - FSO - Tratando arquivos e diretórios.


Neste artigo vamos tratar de arquivos e diretórios usando o FSO.

Programando com o objeto FSO

Se ao precisar criar , mover, deletar e obter informações sobre diretórios e arquivos no VB você usa as API do Windows talvez este artigo lhe seja útil: Você pode fazer tudo isto sem recorrer as API's. O VB6 trouxe como novidade o objeto FileSystemObject que permite fazer praticamente todo este serviço e obter qualquer informação sobre arquivos e diretórios de uma maneira simples.

O modelo para o FileSystemObject - FSO , é o seguinte:

Objeto Descrição
Drive Permite obter informações sobre os drives ( CD-ROM, RAM disk, etc.) existentes no sistema, espaço disponível , nome, etc.
Folder Pemite criar , excluir, copiar e mover diretórios e obter informações como nome, caminho, data de criação , etc.
Files Pemite criar , excluir , copiar e mover arquivos e obter informações como nome, caminho, data de criação , etc.
FileSystemObject O principal objeto do grupo, possui métodos que permitem criar, excluir, mover e obter as mais variadas informações sobre drives, arquivos e diretórios .
TextStream Permite a leitura e a escrita em arquivos textos.

Para usar o FSO faça o seguinte:

  1. Defina um objeto FSO usando o método CreateObject ou declarando ( DIM ) uma variável objeto FSO.
  2. Use o método apropriado para criar o objeto definido
  3. Acesse as propriedades do objeto FSO.

O objeto FSO esta presente em uma type library chamada Scripting a qual esta contida no arquivo Scrrun.dll. E você deve fazer uma referência a esta library em seu projeto para poder usar o FSO . Para isto selecione no menu Project->References... procure por 'Microsoft Scripting Runtime' .

Vejamos como criar um objeto FSO . Podemos fazer isto de duas maneiras:

1-) Declarando uma variável objeto FSO. (funciona somente no VB )

Dim fso As New FileSystemObject

2-) Usando o método CreateObject : (funciona no VB e no VBScript)

set fso = CreateObject("Scripting.FileSystemObject")

Agora é só usar os métodos e propriedades do objeto criado. Para ver os métodos e propriedades do objeto clique no link : FSO - métodos e propriedades. A seguir veremos alguns exemplos de utilização:

Acessando Drives, Diretórios e Arquivos.

Para acessar um drive , arquivo ou diretório existente use o método "Get" ( GetFile , GetDrive) apropriado do FSO.

1- Acessando o arquivo teste.txt no diretório c:\teste e visualizando : o tamanho, a data de criaçao, a data de último acesso, a data da última modificação.(iremos mostrar a informação em um controle ListBox - list1)

Inicie um novo projeto no VB e no formulário padrão insira um TextBox - text1.text - , um ListBox - list1 e um botão de comando - command1 . Veja layout abaixo:

O resultado do processamento do código abaixo
Private Sub Command1_Click()
Dim fso As New FileSystemObject
Dim arq As File

Set arq = fso.GetFile(Text1.Text)

With arq
  List1.AddItem "Tamanho  : " & vbTab & FormatNumber(.Size, 0)
  List1.AddItem "Data de criação   : " & vbTab & .DateCreated
  List1.AddItem "Último acesso  : " & vbTab & .DateLastAccessed
  List1.AddItem "Última alteração : " & vbTab & .DateLastModified
  List1.AddItem "nome abreviado  : " & vbTab & .ShortName
End With

End Sub

2 - Acessando o diretório c:\ e visualizando : a letra associada ao drive, o nome do Volume, espaço total, espaço disponível e o número de série do drive e o tipo do driver. (iremos mostrar a informação em um controle ListBox - list1)

Para verificar se o drive esta pronto usamos a propriedade IsReady.

Inicie um novo projeto no VB e no formulário padrão insira uma combobox - combo1 - , um ListBox - list1 e um botão de comando - command1 : Veja layout abaixo

O resultado do processamento do código abaixo
Private Sub Command1_Click()
Dim fso As New FileSystemObject
Dim arquivo As drive
Set arquivo = fso.GetDrive(Combo1.Text)
With arquivo
  If .IsReady Then
    List1.AddItem "Letra associada ao drive : " & .DriveLetter
    List1.AddItem "Nome do Volume : " & .VolumeName
    List1.AddItem "Espaço total do drive : " & FormatNumber(.TotalSize / 1024, 0)
    List1.AddItem "Espaço disponível livre no drive : " & FormatNumber(.FreeSpace / 1024, 0)
    List1.AddItem "Número de série do drive : " & .SerialNumber
    List1.AddItem "Tipo do drive: " & .DriveType
Else
    MsgBox " A unidade não esta pronta !! Verifique !!", vbCritical, "Erro de acesso"
End If
End With
End Sub

Tratamento de arquivos Texto

1 - Acessando arquivos texto : criando , lendo , copiando e excluindo...

Criando um arquivo em c:\teste chamado ArqTeste.txt e escrevendo no arquivo e a seguir lendo o conteúdo do arquivo e a seguir movendo o arquivo criado para o diretório c:\temp

Inicie um novo projeto no VB e no formulário padrão insira três TextBox - text1 , text2 e text3 e text4 e quatro botões de comando : (a caixa de texto que exibe o arquivo deve ser Multiline)

  • cmdcriararqtxt
  • cmdlerarqtxt
  • cmdcopiararqtxt
  • cmdexcluirarqtxt

Veja layout abaixo:

O resultado do processamento do código abaixo

- O código da seção General Declarations do formulário :

Dim fso As New FileSystemObject
Dim arqtxt As TextStream
Dim arq1 As TextStream
Dim arq3 As TextStream
Dim arq2 As TextStream
Dim texto As String

- O código do botão - Criar Arquivo Texto: Observe o uso das propriedades Write e Writeline

Private Sub cmdcriararqtxt_Click()

On Error GoTo trataerro

Set arqtxt = fso.CreateTextFile(Text2.Text, True)
'gravando no arquivo

With arqtxt
  .WriteLine ("Isto é um teste")
  .Write ("de gravação em arquivo texto.")
  .WriteLine (" Macoratti acabou de criar este arquivo texto")
  .Write "nome do arquivo " & Text2.Text
  .Close
End With
MsgBox " Arquivo : " & Text2.Text & " Criado com sucesso ", vbInformation
Exit Sub

trataerro:
MsgBox Err.Description & " - " & Err.Number, vbCritical

End Sub

- O código do botão - Ler arquivo texto : Abrimos o arquivo para leitura e lemos todo o conteúdo do arquivo (ReadAll)

Private Sub cmdlerarqtxt_Click()
'Lendo o arquivo criado

On Error GoTo trataerro
Set arq2 = fso.OpenTextFile(Text3.Text, ForReading, True)
texto = arq2.ReadAll

'mostrando o conteúdo do arquivo
Text1.Text = texto

arq2.Close
Exit Sub

trataerro:
If Err.Number = 53 Then
   MsgBox "Arquivo <<" & Text4.Text & ">> não encontrado !", vbCritical
Else
   MsgBox Err.Description & " - " & Err.Number, vbCritical
End If

End Sub

- O código do botão - Copiar arquivo texto : usamos a propriedade CopyFile

Private Sub cmdcopiararqtxt_Click()
'Copiando o arquivo para c:\temp

On Error GoTo trataerro

fso.CopyFile Text4.Text, "c:\temp\", True

MsgBox "Arquivo => " & Text4.Text & " << COPIADO >> ", vbInformation
Exit Sub

trataerro:
If Err.Number = 53 Then
  MsgBox "Arquivo <<" & Text4.Text & ">> não encontrado !", vbCritical
Else
  MsgBox Err.Description & " - " & Err.Number, vbCritical
End If
End Sub

- O código do botão - Excluir arquivo texto: Usamos a propriedade : DeleteFile.

Private Sub cmdexcluirarqtxt_Click()
'Excluindo o arquivo de c:\teste

On Error GoTo trataerro
fso.DeleteFile Text4.Text, True

MsgBox "Arquivo => " & Text4.Text & " << Excluido >> ", vbInformation
Exit Sub

trataerro:
If Err.Number = 53 Then
  MsgBox "Arquivo <<" & Text4.Text & ">> não encontrado !", vbCritical
Else
  MsgBox Err.Description & " - " & Err.Number, vbCritical
End If

End Sub

2 - Criando um arquivo temporário

Vou mostrar agora como obter nome de um arquivo temporário e copiar um arquivo para este arquivo. Para isto vamos usar o método : GetTempName .

Este método um nome de arquivo/diretório temporário randomicamente que podemos usar para realizar algumas tarefas como copia ou backup. Exemplo :

Dim fso As New FileSystemObject

Call fso.CopyFile(Text1.Text, fso.GetTempName)

3 - Localizando arquivos

Com a combinação de alguns métodos e propriedades do objeto FileSystemObject e algum código podemos criar uma rotina para localizar arquivos. Vamos a ela...

Inicie um novo projeto no VB e no formulário padrão insira um TextBox - text1.text - , um ListBox - list1 e um botão de comando - command1 . Veja layout abaixo:

O resultado do processamento do código abaixo

O código do botão de comando - Iniciar Busca :

Private Sub cmdbusca_Click()

Call procuraArquivos(fso.GetFolder(Combo1.Text))

If Not achei Then
  msg = "Não foi possivel localizar o(s) arquivo(s) informado."
Else
  msg = "Foram localizados " & contador & " arquivo(s) com sucesso."
End If

MsgBox msg, vbInformation, "Localizando arquivos."

End Sub

Agora o código da rotina - procuraArquivos - onde passamos como argumento o driver informado na combobox.

Private Sub procuraArquivos(diretorio As Folder)
Dim arquivo As File
Dim subdiretorio As Folder

For Each arquivo In diretorio.Files
    If arquivo.Name Like Text1.Text Then
    List1.AddItem arquivo.Name
    achei = True
     contador = contador + 1
End If
Next

End Sub
Observe o uso do operador LIKE do Visual Basic.

A sintaxe de Like é a seguinte : result = string Like pattern

  • result - qualquer variável numérica
  • string - qualquer expressão string
  • pattern - uma expressão string de comparação

Exemplos :

  1. Dim MyCheck
    MyCheck = "aBBBa" Like "a*a"
    ' Retorna True.
    MyCheck = "F" Like "[A-Z]"
    ' Retorna True.
    MyCheck = "F" Like "[!A-Z]"
    ' Retorna False.
    MyCheck = "a2a" Like "a#a"
    ' Retorna True.

A utilização das propriedades é quase intuitiva , basta usar o intellisense que objeto exibirá as propriedades disponíveis . Moleza !!! não é mesmo ???

Tchau !!! Voltaremos a este assunto em breve , até la´....

Referências:


José Carlos Macoratti