Um novo recurso do Visual Basic é o File System Object, que fornece uma ferramenta baseada em objetos para trabalhar com pastas e arquivos. Isto permite que você use a sintaxe familiar de métodos e propriedades de objetos com um conjunto rico de propriedades, métodos e eventos para fazer o processamento destes elementos.
O modelo de objetos do FSO lhe dá a habilidade de criar, alterar, mover e excluir pastas e detectar se uma pasta particular existe, e, existindo, onde. Também permite que você obtenha informações sobre as pastas tais como seus nomes, a data em que foram criadas ou modificadas pela última vez e assim por diante.
O modelo de objetos do FSO faz o processamento de arquivos muito mais fácil
também. Quando está processando arquivos, você primeiramente tem como meta armazenar informação num formato eficiente tanto na ocupação de espaço como no acesso. Você precisa ser capaz de criar arquivos, incluir e atualizar e obter saída com eles. Se você usar os recursos de um banco de dados, isto pode ocasionar uma sobre carga de trabalho para a sua aplicação. Por muitas razões você pode não querer todo aquele aparato de acesso a dados no seu sistema ou o seu acesso aos dados pode não requerer todas os recursos de um sistema gerenciador de banco de dados. Neste caso, armazenar seus dados num arquivo binário ou de texto pode ser a solução mais eficiente.
O modelo de objetos do FSO, que está contido na Scripting type library (Scrrun.Dll), suporta criação de arquivos de texto e sua manipulação através do objeto TextStream. Ele ainda não suporta a criação e manipulação de arquivos binários. Para manipular arquivos binários, use o comando Open com o sinalizador Binary.
O modelo FSO contém estes objetos:
Objeto |
Descrição |
Drive |
Permite que você obtenha informações dos drives anexados ao sistema, tais como quanto de espaço está disponível, qual o seu nome compartilhado e etc. Note que um drive não é necessariamente um disco rígido. Ele pode ser um drive de CD-ROM, um disco de RAM ou algo mais. Também não é necessário que um drive esteja fisicamente ligado ao sistema. Ele pode estar logicamente conectado através de uma LAN, por exemplo. |
Folder |
Permite que você crie, exclua, mova pastas e consulte o sistema sobre seus nomes, caminhos e outras informações. |
Files |
Permite que você crie, exclua, mova arquivos e consulte o sistema sobre seus nomes, caminhos e outras informações |
FileSystemObject |
O principal objeto do grupo, repleto de métodos que lhe possibilitam criar, excluir, obter informações sobre e manipular genericamente drives, pastas e arquivos. Muitos dos métodos associados a este objeto duplicam aqueles de outros objetos. |
TextStream |
Habilita-o para ler e gravar arquivos texto. |
Programando com o Modelo de Objetos FSO
A programação com o FSO envolve três tarefas principais:
O modelo de objetos FSO está contida na biblioteca Scripting, que está localizada no arquivo Scrrun.Dll. Se você não tem uma referência a ele, crie uma marcando na caixa de diálogo References o item "Microsoft Scripting Runtime".
Criando um FileSystemObject
O primeiro passo é criar o objeto FileSystemObject com o qual se vai trabalhar. Você pode faze-lo de duas maneiras:
Criando uma variável do tipo FileSystemObject :
Dim fso As New FileSystemObject
ou
Usado o método CreateObject para criar um objeto FileSystemObject:
Set fso = CreateObject("Scripting.FileSystemObject")
Na sintaxe acima, Scripting é o nome da biblioteca de tipos e FileSystemObject é o nome do objeto do qual você quer criar uma instância.
Nota: O primeiro método funciona apenas no Visual Basic, enquanto o segundo funciona tanto no Visual Basic como no VBScript.
Usando o Método apropriado
O próximo passo é usar o método apropriado do objeto FileSystemObject. Por exemplo, se você quer criar um novo objeto, você pode tanto usar o método CreateFolder ou CreateTextFile. (O modelo de objetos FileSystemObject não suporta a criação ou exclusão de drives)
Se quer excluir objetos, você pode usar os métodos DeleteFile ou DeleteFolder do objeto FileSystemObject, ou o método Delete dos objetos File e Folder.
Usando os métodos apropriados, você pode também copiar e mover arquivos e pastas.
Note que parte da funcionalidade do FileSystemObject é redundante. Por exemplo, você pode copiar um arquivo tanto usando o método CopyFile do FileSystemObject quanto o método Copy do objeto File. Os métodos fazem o mesmo. Ambos existem para dar a máxima flexibilidade de programação.
Acessando Drives, Arquivos e Pastas Existentes
Para Ter acesso a um drive, arquivo ou pasta existente, use o método "get" apropriado do FileSystemObject.
GetDrive
GetFolder
GetFile
Por exemplo:
Dim fso As New FileSystemObject, fil As File
Set fil = fso.GetFile("c:\test.txt")
Note, contudo, que não é necessário usar os métodos "get" para os objetos recém criados, já que as funções de criação retornam uma referência ao recém criado objeto. Por exemplo, se você criar uma nova pasta usando CreateFolder, não tem que usar o método GetFolder para acessar suas propriedades tais como Name, Size, Path e outras mais. Basta atribuir a uma variável o retorno da função CreateFolder para ter acesso aos seus métodos, propriedades e eventos:
Private Sub Create_Folder()
Dim fso As New FileSystemObject, fldr As Folder
Set fldr = fso.CreateFolder("C:\MyTest")
MsgBox "Created folder: " & fldr.Name
End Sub
Acessando as Propriedades do Objeto
Uma vez que você tem uma referência a um objeto, pode acessar as suas propriedades . Por exemplo, digamos que você queira obter o nome de uma pasta em particular. Primeiro você cria uma instância do objeto e obtém uma referência a ele com o método apropriado (neste caso, o método GetFolder, já que a pasta já existe):
Set fldr = fso.GetFolder("c:\")
Agora que você tem uma referência ao objeto Folder e pode checar sua propriedade Name:
Debug.Print "Nome da pasta é: "; fldr.Name
Se você quer saber quando foi feita a última modificação em um arquivo, use a seguinte sintaxe:
Dim fso As New FileSystemObject, fil As File
Set fil = fso.GetFile("c:\detlog.txt") ' Obtém um objeto File para consulta.
Debug.Print "Última modificação no arquivo: "; fil.DateLastModified
Você pode trabalhar com arquivos no Visual Basic 6 usando tanto usando os modernos recursos do modelo FSO como os antigos recurso já existentes. Independente do tipo de arquivo você pode move-lo, copia-lo ou exclui-lo.
Há duas principais categorias de manipulação de arquivos:
Há três caminhos para criar arquivos de texto sequenciais (às vezes referido como "text stream"). Um caminho é usar o método CreateTextFile. Para criar um arquivo de texto vazio:
Dim fso As New FileSystemObject, fil As File
Set fil = fso.CreateTextFile("c:\testfile.txt", True)
Nota
O modelo FSO não suporta ainda a criação de arquivos randômicos ou binários. Para criar estes tipos de arquivos, use o comando Open com o argumento Random ou Binary.Um outro meio é usar o método OpenTextFile do FileSystemObject com o flag ForWriting ligado:
Dim fso As New FileSystemObject, ts As New TextStream
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting)
Ou você pode usar o método OpenTextStream com o flag ForWriting ligado:
Dim fso As New FileSystemObject, fil As File, ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("test1.txt")
Set fil = fso.GetFile("test1.txt")
Set ts = fil.OpenAsTextStream(ForWriting)
Uma vez que o arquivo esteja criado, você pode adicionar dados a em três etapas:
Para abrir o arquivo, você tem que usar um de dois métodos: OpenAsTextStream do objeto File , ou o método OpenTextFile do objeto FileSystemObject .
Para gravar dados para o arquivo texto, use ou o método Write ou WriteLine do objeto TextStream. A única diferença entre Write e WriteLine é que WriteLine adiciona caracteres de final de linha à string gravada. Se você quiser adicionar novas linhas ao arquivo de texto, use o método WriteBlankLines.
Par fechar um arquivo aberto, use o método Close do objeto TextStream. Aqui vai um exemplo de como abrir um arquivo, usar os três método de gravação e o seu fechamento:
Sub Create_File()
Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
txtfile.Write ("This is a test. ") ' Write a line.
' Write a line with a newline character.
txtfile.WriteLine("Testing 1, 2, 3.")
' Write three newline characters to the file.
txtfile.WriteBlankLines(3)
txtfile.Close
End Sub
Para ler dados de um arquivo texto, use os métodos Read, ReadLine ou ReadAll do objeto TextStream.
Tarefa |
Método |
Ler um número específico de caracteres de um arquivo. |
Read |
Ler uma linha inteira(até, mas não incluindo, o caractere de nova linha) |
ReadLine |
Ler o conteúdo total de um arquivo texto |
ReadAll |
|
|
Se você usar os métodos Read ou ReadLine e quiser saltar uma porção particular de dados, você pode usar os métodos Skip ou SkipLine.
O texto resultante dos métodos de leitura é armazenado em uma string que pode ser exibida num controle, manipulada por operadores de strings ( Tais como Left, Right, e Mid), concatenada e assim por diante.
Nota: A constante vbNewLine contém um caracter ou caracteres ( dependendo do sistema operacional) para avançar o cursor para o início da próxima linha (carriage-return/linefeed). Esteja consciente de que o final de algumas strings pode conter estes caracteres não imprimíveis.
Sub Read_Files()
Dim fso As New FileSystemObject, txtfile, _
fil1 As File, ts As TextStream
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "Gravando arquivo"
' Write a line.
Set fil1 = fso.GetFile("c:\testfile.txt")
Set ts = fil1.OpenAsTextStream(ForWriting)
ts.Write "Hello Mundo"
ts.Close
' Lê o conteúdo do arquivo.
Set ts = fil1.OpenAsTextStream(ForReading)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
O modelo FSO tem dois métodos tando para mover, copiar ou excluir arquivos.
Tarefa |
Método |
Mover um arquivo |
File.Move ou |
Copiar um arquivo |
File.Copy ou |
Excluir um arquivo |
File.Delete ou |
Este exemplo cria um arquivo texto no diretório raiz do drive C, grava alguma informação nele, move o para um diretório chamado \tmp, faz uma cópia dele em um diretório chamado \temp, e então exclui as cópias de ambos os diretórios.
Para rodar este exemplo, esteja certo de que você tem diretórios chamados \tmp e \temp no seu diretório raiz do drive C.
Sub Manip_Files()
Dim fso as New FileSystemObject, txtfile, fil1, fil2
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "Gravando arquivo"
' Grava uma linha.
txtfile.Write ("Isto é um teste.")
' Fecha o arquivo.
txtfile.Close
MsgBox "Move o arquivo para c:\tmp"
' Obtém uma referência para o arquivo no diretório
' raiz de C
Set fil1 = fso.GetFile("c:\testfile.txt")
' Move para \tmp directory.
fil1.Move ("c:\tmp\testfile.txt")
MsgBox "Copiando para c:\temp"
' Copy the file to \temp.
fil1.Copy ("c:\temp\testfile.txt")
MsgBox "Excluindo"
' Obtém referências para os arquivos.
Set fil1 = fso.GetFile("c:\tmp\testfile.txt")
Set fil2 = fso.GetFile("c:\temp\testfile.txt")
' Exclui os arquivos.
fil1.Delete
fil2.Delete
MsgBox "Tudo terminado!"
End Sub
Transporte código com mais facilidade com a dez memórias de cópia do RabJump