lunes, 8 de septiembre de 2008

File System Object, FSO

A través del File System Object o Modelo de Objetos del Sistema de Archivos es posible manipular (crear, modificar, mover y eliminar) directorios y archivos, así como también obtener información de las mismos. Lo más importante es el poder manipular datos en estas estructuras.

Este modelo de objetos se encuentra contenido en una biblioteca de tipos llamada Scripting (Scrrun.dll), la cual permite la manipulación de archivos de texto mediante el objeto TextStream aunque para manipular archivos binarios se utiliza el comando Open con el indicador Binary.

Este Modelo de objetos tiene los siguientes objetos:

  • Drive
  • Folder
  • Files
  • FileSystemObject
  • TextStream

Para utilizar este Modelo es necesario:

  • Utilizar el método CreateObject o dimensionar una variable como objeto tipo FileSystemObject y crear un objeto.
    1. Set fso = CreateObject("Scripting.Objeto_FileSystemObject")
    2. Dim fso As New FileSystemObject
  • Utilizar el método adecuado en el objeto creado.
  • Es necesario tener acceso a las propiedades del objeto.

Nota: Este Modelo de objetos es redundante, es decir, los siguientes escenarios tienen el mismo objetivo:

  • Copiar un archivo utilizando el método CopyFile del Objeto FileSystemObject
  • Copiar un archivo utilizando el método Copy del objeto File

Las siguientes constantes son utiles para los argumentos la manipular objetos FSO:

 Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 3
Const TristateUseDefault = -2
Const TristateTrue = -1

Drive

A través de este objeto es posible obtener información de las unidades lógicas, el espacio que tienen libre, o si son unidades compartidas.

    Set fsoTmp = fso.GetDrive(fso.GetDriveName(unidad.Drive))
MsgBox fsoTmp.VolumeName
MsgBox "Espacio total : " & FormatNumber(fsoTmp.TotalSize / 1024, 0) & "kb"
MsgBox "Espacio libre : " & FormatNumber(fsoTmp.FreeSpace / 1024, 0) & "kb"

Folder

A través de este objeto es posible crear, eliminar o mover directorios, también es posible obtener la ruta y nombres de estos.

Crear directorio:

 Private Sub cmdMakeDir_Click()
fso.CreateFolder ("c:\" & txtDir)
End Sub

¿Existe el directorio o se creo?

 Set fsoTmp = fso.GetFolder("c:\" & txtDir)
If fso.FolderExists(fsoTmp) Then
MsgBox "Existe"
Else
MsgBox "No existe"
End If

Files

A través de este objeto es posible crear, eliminar o mover archivos, también es posible obtener la ruta y nombres de estos.

Abrir un archivo:

    Set fsoTmp = fso.CreateTextFile("c:\" & txtDir & "\" & txtFile, True)
Set fsoTmp = fso.OpenTextFile("c:\" & txtDir & "\" & txtFile, 2)

    Set fsoTmp = fso.GetFile("c:\" & txtDir & "\" & txtFile)
Set fsoX = fsoTmp.OpenAsTextStream(2, -2)

Escribir datos en un archivo:

    Set fsoTmp = fso.GetFile("c:\" & txtDir & "\" & txtFile)
Set fsoX = fsoTmp.OpenAsTextStream(2, -2)
fsoX.Write (txtData) 'Escribe una línea
fsoX.WriteLine (txtData2) 'Escribe una linea con un caracter de nueva línea
fsoX.WriteBlankLines (5) 'Escribe 5 caracteres de nueva línea
fsoX.Close

Leer datos de un archivo:

    Set fsoTmp = fso.GetFile("c:\sol\test.txt")
Set fsoX = fso.GetFile("c:\sol\test.txt").OpenAsTextStream(ForReading)
txtFileData = fsoX.ReadLine
fsoX.Close

FileSystemObject

Objeto primordial, el cual permite crear, eliminar y obtener información, además de controlar unidades, directorios y archivos.

 Set fso = CreateObject("Scripting.FileSystemObject")

TextStream

A través de este objeto es posible leer y escribir archivos de texto.

Tipos de Acceso a Archivos

Visual Basic tiene 3 tipos de acceso a archivos:

  1. Secuencial, lee y escribe archivos de texto en bloques continuos.

    Es posible abrir un archivo para acceso secuencial para realizar las siguientes tareas:

    • Leer caracteres desde un archivo (Input)
    • Escribir caracteres a un archivo (Output)
    • Agregar caracteres a un archivo (Append)

    Si utiliza Input el archivo debe existir o de lo contrario se produce un error.

    Si utiliza Output o Append la instrucción Open primero crea el archivo y después lo abre.

    Una vez que el archivo fué abierto con Input, Output o Append es necesario cerrarlo con la instrucción Close.

  2. Aleatorio, lee y escribe archivos binarios de texto o estructurados como registros de longitud fija.
  3. Binario, lee y escribe archivos estructurados de forma arbitraria.

El código que se presenta a continuación, espera que el usuario capture el contenido para el archivo MsFileName, y al dar clic en el botón [Write] almacena en el archivo MsFileName el contenido del txtWrite.

Al dar clic en el botón [Read Line], muestra la primer línea que contiene el archivo MsFileName en txtRead.

Al dar clic en el botón [Read By Line], lee el contenido del archivo MsFileName línea por línea y lo muestra en txtLine, además se indica el número de línea que se va leyendo.

 Option Explicit
Dim MsPathName As String
Dim MsFileName As String
Dim MsAux As String
Private Sub Form_Load()
MsPathName = "C:\"
MsFileName = "FileName.txt"
sBar.SimpleText = "Type the content of the file"
End Sub
Private Sub cmdWrite_Click()
Open MsPathName & MsFileName For Output As #1
Write #1, txtWrite
Close #1
sBar.SimpleText = "The content was added"
End Sub

Private Sub cmdRead_Click()
Open MsPathName & MsFileName For Input As #1
Input #1, MsAux
Close #1
txtRead = MsAux
sBar.SimpleText = "Now you can see the content of the file"
End Sub
Private Sub cmdReadLine_Click()
Dim LsNextLine As String
Dim LnCount As Integer
LnCount = 1
Open MsPathName & MsFileName For Input As #1
Do Until EOF(1)
Line Input #1, LsNextLine
txtLine = txtLine & LnCount & " : " & LsNextLine & vbNewLine
LnCount = LnCount + 1
Loop
Close #1
End Sub

0 comentarios: