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:
- Defina um objeto FSO usando o método CreateObject ou declarando ( DIM ) uma variável objeto FSO.
- Use o método apropriado para criar o objeto definido
- 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 Sub2 - 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 SubTratamento 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 Sub2 - 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 SubAgora 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 SubObserve 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 :
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: