El código de ejemplo descrito en esta sección proporciona un ejemplo real que demuestra muchas de las características disponibles en el modelo de objetos FileSystemObject. Este código muestra cómo todas las características del modelo de objetos funcionan juntas y cómo utilizar esas características eficazmente en su propio código.
Observe que puesto que este código es bastante genérico, se necesita algún código adicional además de ligeras modificaciones para que este código se pueda ejecutar en su equipo. Estos cambios son necesarios por las diversas maneras en que se controlan las entradas y salidas al usuario entre las páginas Active Server y Windows Scripting Host.
Para ejecutar este código en una página Active Server, utilice los pasos siguientes:
Cree una página Web estándar con una extensión .asp.
Copie el código de ejemplo siguiente en ese archivo entre las etiquetas <BODY>...</BODY>.
Encierre todo el código dentro de etiquetas <%...%>.
Mueva la instrucción Option Explicit desde su posición actual en el código a la parte superior de su página HTML, colocándolo incluso antes de la etiqueta <HTML> de apertura.
Sitúe etiquetas <%...%> alrededor de la instrucción Option Explicit para asegurarse de que se ejecuta en el servidor.
Agregue el código siguiente al final del código de ejemplo:
Sub Print(x) Response.Write "<PRE><FONT FACE=""Courier New"" SIZE=""1"">" Response.Write x Response.Write "</FONT></PRE>" End Sub Main
El código anterior agrega un procedimiento de impresión que se ejecutará en el servidor pero que muestra los resultados en el cliente. Para ejecutar este código en Windows Scripting Host, agregue el código siguiente al final del código de ejemplo:
Sub Print(x) WScript.Echo x End Sub Main
La siguiente sección contiene el código:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Código de ejemplo FileSystemObject ' Copyright 1998 Microsoft Corporation. Todos los derechos reservados. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' En cuanto a la calidad del código: ' 1) El código siguiente realiza un tratamiento de cadenas ' concatenando cadenas cortas con el operador "&" . ' Puesto que la concatenación de cadenas es costosa, esta es una ' manera poco eficiente de escribir el código. ' No obstante, es una forma de escribir código muy facil de ' mantener y se utiliza aquí porque este programa realiza ' frecuentes operaciones de disco y porque el disco es mucho ' más lento que las operaciones de memoria necesarias para ' concatenar las cadenas. Tenga en cuenta que esto es un código ' de demostración, no un código de producción. ' ' 2) "Option Explicit" se utiliza porque un acceso de variable declarada ' es un poco más rápido que el acceso de variable no declarada. ' También evita que se arrastren los errores por todo el código, ' como cuando escribe DriveTypeCDORM en lugar de DriveTypeCDROM. ' ' 3) El control de errores está ausente en este código para conseguir ' un código más legible. Aunque se tomaron precauciones para asegurar ' que el código no cometerá errores en casos comunes, los sistemas de ' archivo pueden ser impredecibles. En el código de producción, utilice ' On Error Resume Next y el objeto Err para atrapar posibles errores. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Algunas variables globales útiles '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim TabStop Dim NewLine Const TestDrive = "C" Const TestFilePath = "C:\Test" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Constantes devueltas por Drive.DriveType '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Const DriveTypeRemovable = 1 Const DriveTypeFixed = 2 Const DriveTypeNetwork = 3 Const DriveTypeCDROM = 4 Const DriveTypeRAMDisk = 5 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Constantes devueltas por File.Attributes '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Const FileAttrNormal = 0 Const FileAttrReadOnly = 1 Const FileAttrHidden = 2 Const FileAttrSystem = 4 Const FileAttrVolume = 8 Const FileAttrDirectory = 16 Const FileAttrArchive = 32 Const FileAttrAlias = 64 Const FileAttrCompressed = 128 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Constantes para abrir archivos '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Const OpenFileForReading = 1 Const OpenFileForWriting = 2 Const OpenFileForAppending = 8 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'ShowDriveType
' Objetivo: ' Genera una cadena que describe el tipo de unidad de un objeto ' Drive dado. ' Demuestra lo siguiente ' - Drive.DriveType '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function ShowDriveType(Drive) Dim S Select Case Drive.DriveType Case DriveTypeRemovable S = "Extraible" Case DriveTypeFixed S = "Fijo" Case DriveTypeNetwork S = "Red" Case DriveTypeCDROM S = "CD-ROM" Case DriveTypeRAMDisk S = "Disco RAM" Case Else S = "Desconocido" End Select ShowDriveType = S End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'ShowFileAttr
' Objetivo: ' Genera una cadena que describe los atributos de un archivo o carpeta. ' Demuestra lo siguiente ' - File.Attributes ' - Folder.Attributes '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function ShowFileAttr(File) ' File puede ser un archivo o carpeta Dim S Dim Attr Attr = File.Attributes If Attr = 0 Then ShowFileAttr = "Normal" Exit Function End If If Attr And FileAttrDirectory Then S = S & "Directorio " If Attr And FileAttrReadOnly Then S = S & "Sólo lectura" If Attr And FileAttrHidden Then S = S & "Oculto " If Attr And FileAttrSystem Then S = S & "Sistema " If Attr And FileAttrVolume Then S = S & "Volumen " If Attr And FileAttrArchive Then S = S & "Modificado " If Attr And FileAttrAlias Then S = S & "Alias " If Attr And FileAttrCompressed Then S = S & "Comprimido " ShowFileAttr = S End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'GenerateDriveInformation
' Objetivo: ' Genera una cadena que describe el estado actual de las unidades ' disponibles. ' Demuestra lo siguiente ' - FileSystemObject.Drives ' - Iterating the Drives collection ' - Drives.Count ' - Drive.AvailableSpace ' - Drive.DriveLetter ' - Drive.DriveType ' - Drive.FileSystem ' - Drive.FreeSpace ' - Drive.IsReady ' - Drive.Path ' - Drive.SerialNumber ' - Drive.ShareName ' - Drive.TotalSize ' - Drive.VolumeName '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function GenerateDriveInformation(FSO) Dim Drives Dim Drive Dim S Set Drives = FSO.Drives S = "Número de unidades:" & TabStop & Drives.Count & NewLine & NewLine ' Construir la primera línea del informe. S = S & String(2, TabStop) & "Nombre" S = S & String(3, TabStop) & "Sistema" S = S & TabStop & "Espacio" S = S & TabStop & "Espacio" S = S & TabStop & "Espacio" S = S & TabStop & "Número" & NewLine ' Construir la segunda línea del informe. S = S & "Letra" S = S & TabStop & "Ruta" S = S & TabStop & "Tipo" S = S & TabStop & "¿Listo?" S = S & TabStop & "de unidad" S = S & TabStop & "de archivos" S = S & TabStop & "total" S = S & TabStop & "libre" S = S & TabStop & "disponible" S = S & TabStop & "de serie" & NewLine ' Línea separadora. S = S & String(105, "-") & NewLine For Each Drive in Drives S = S & Drive.DriveLetter S = S & TabStop & Drive.Path S = S & TabStop & ShowDriveType(Drive) S = S & TabStop & Drive.IsReady If Drive.IsReady Then If DriveTypeNetwork = Drive.DriveType Then S = S & TabStop & Drive.ShareName Else S = S & TabStop & Drive.VolumeName End If S = S & TabStop & Drive.FileSystem S = S & TabStop & Drive.TotalSize S = S & TabStop & Drive.FreeSpace S = S & TabStop & Drive.AvailableSpace S = S & TabStop & Hex(Drive.SerialNumber) End If S = S & NewLine Next GenerateDriveInformation = S End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' GenerateFileInformation
' Objetivo: ' Genera una cadena que describe el estado actual de un archivo. ' Demuestra lo siguiente ' - File.Path ' - File.Name ' - File.Type ' - File.DateCreated ' - File.DateLastAccessed ' - File.DateLastModified ' - File.Size '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function GenerateFileInformation(File) Dim S S = NewLine & "Ruta:" & TabStop & File.Path S = S & NewLine & "Nombre:" & TabStop & File.Name S = S & NewLine & "Tipo:" & TabStop & File.Type S = S & NewLine & "Atributos:" & TabStop & ShowFileAttr(File) S = S & NewLine & "Creado:" & TabStop & File.DateCreated S = S & NewLine & "Con acceso:" & TabStop & File.DateLastAccessed S = S & NewLine & "Modificado:" & TabStop & File.DateLastModified S = S & NewLine & "Tamaño" & TabStop & File.Size & NewLine GenerateFileInformation = S End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'GenerateFolderInformation
' Objetivo: ' Genera una cadena que describe el estado actual de una carpeta. ' Demuestra lo siguiente ' - Folder.Path ' - Folder.Name ' - Folder.DateCreated ' - Folder.DateLastAccessed ' - Folder.DateLastModified ' - Folder.Size '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function GenerateFolderInformation(Folder) Dim S S = "Ruta:" & TabStop & Folder.Path S = S & NewLine & "Nombre:" & TabStop & Folder.Name S = S & NewLine & "Atributos:" & TabStop & ShowFileAttr(Folder) S = S & NewLine & "Creado:" & TabStop & Folder.DateCreated S = S & NewLine & "Con acceso:" & TabStop & Folder.DateLastAccessed S = S & NewLine & "Modificado:" & TabStop & Folder.DateLastModified S = S & NewLine & "Tamaño:" & TabStop & Folder.Size & NewLine GenerateFolderInformation = S End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'GenerateAllFolderInformation
' Objetivo: ' Genera una cadena que describe el estado actual de una carpeta y ' todos los archivos y subcarpetas. ' Demuestra lo siguiente ' - Folder.Path ' - Folder.SubFolders ' - Folders.Count '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function GenerateAllFolderInformation(Folder) Dim S Dim SubFolders Dim SubFolder Dim Files Dim File S = "Carpeta:" & TabStop & Folder.Path & NewLine & NewLine Set Files = Folder.Files If 1 = Files.Count Then S = S & "Hay 1 archivo" & NewLine Else S = S & "Hay " & Files.Count & " archivos" & NewLine End If If Files.Count <> 0 Then For Each File In Files S = S & GenerateFileInformation(File) Next End If Set SubFolders = Folder.SubFolders If 1 = SubFolders.Count Then S = S & NewLine & "Hay 1 subcarpeta" & NewLine & NewLine Else S = S & NewLine & "Hay" & SubFolders.Count & " subcarpetas" & NewLine & NewLine End If If SubFolders.Count <> 0 Then For Each SubFolder In SubFolders S = S & GenerateFolderInformation(SubFolder) Next S = S & NewLine For Each SubFolder In SubFolders S = S & GenerateAllFolderInformation(SubFolder) Next End If GenerateAllFolderInformation = S End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'GenerateTestInformation
' Objetivo: ' Genera una cadena que describe el estado actual de la carpeta ' C:\Test y todos los archivos y subcarpetas. ' Demuestra lo siguiente ' - FileSystemObject.DriveExists ' - FileSystemObject.FolderExists ' - FileSystemObject.GetFolder '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function GenerateTestInformation(FSO) Dim TestFolder Dim S If Not FSO.DriveExists(TestDrive) Then Exit Function If Not FSO.FolderExists(TestFilePath) Then Exit Function Set TestFolder = FSO.GetFolder(TestFilePath) GenerateTestInformation = GenerateAllFolderInformation(TestFolder) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' DeleteTestDirectory
' Objetivo: ' Limpia el directorio de prueba. ' Demuestra lo siguiente ' - FileSystemObject.GetFolder ' - FileSystemObject.DeleteFile ' - FileSystemObject.DeleteFolder ' - Folder.Delete ' - File.Delete '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub DeleteTestDirectory(FSO) Dim TestFolder Dim SubFolder Dim File
' Dos formas de eliminar un archivo: FSO.DeleteFile(TestFilePath & "\Beatles\OctopusGarden.txt") Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt") File.Delete ' Dos formas de eliminar una carpeta: FSO.DeleteFolder(TestFilePath & "\Beatles") FSO.DeleteFile(TestFilePath & "\ReadMe.txt") Set TestFolder = FSO.GetFolder(TestFilePath) TestFolder.Delete End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' CreateLyrics
' Objetivo: ' Genera un par de archivos de texto en una carpeta. ' Demuestra lo siguiente ' - FileSystemObject.CreateTextFile ' - TextStream.WriteLine ' - TextStream.Write ' - TextStream.WriteBlankLines ' - TextStream.Close''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub CreateLyrics(Folder) Dim TextStream
Set TextStream = Folder.CreateTextFile("OctopusGarden.txt")
TextStream.Write("Octopus' Garden ") ' Note que esto no agrega una línea al archivo.
TextStream.WriteLine("(por Ringo Starr)")
TextStream.WriteBlankLines(1)
TextStream.WriteLine("I'd like to be under the sea in an octopus' garden in the shade,")
TextStream.WriteLine("He'd let us in, knows where we've been -- in his octopus' garden in the shade.")
TextStream.WriteBlankLines(2)
TextStream.Close
Set TextStream = Folder.CreateTextFile("BathroomWindow.txt")
TextStream.WriteLine("She Came In Through The Bathroom Window (por Lennon/McCartney)")
TextStream.WriteLine("")
TextStream.WriteLine("She came in through the bathroom window protected by a silver spoon")
TextStream.WriteLine("But now she sucks her thumb and wanders by the banks of her own lagoon")
TextStream.WriteBlankLines(2)
TextStream.Close
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetLyrics
' Objetivo:
' Muestra los contenidos de los archivos de letras.
' Demuestra lo siguiente
' - FileSystemObject.OpenTextFile
' - FileSystemObject.GetFile
' - TextStream.ReadAll
' - TextStream.Close
' - File.OpenAsTextStream
' - TextStream.AtEndOfStream
' - TextStream.ReadLine
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetLyrics(FSO)
Dim TextStream
Dim S
Dim File
' Hay varias formas de abrir un archivo de texto y varias formas de
' leer los datos de un archivo. Aquí hay dos formas para hacer cada
' una de ellas:
Set TextStream = FSO.OpenTextFile(TestFilePath & "\Beatles\OctopusGarden.txt", OpenFileForReading)
S = TextStream.ReadAll & NewLine & NewLine TextStream.Close Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt") Set TextStream = File.OpenAsTextStream(OpenFileForReading) Do While Not TextStream.AtEndOfStream S = S & TextStream.ReadLine & NewLine Loop TextStream.Close GetLyrics = S End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' BuildTestDirectory
' Objetivo: ' Genera una jerarquía de directorio para demostrar FileSystemObject. ' Construimos una jerarquía en este orden: ' C:\Test ' C:\Test\ReadMe.txt ' C:\Test\Beatles ' C:\Test\Beatles\OctopusGarden.txt ' C:\Test\Beatles\BathroomWindow.txt ' Demuestra lo siguiente ' - FileSystemObject.DriveExists ' - FileSystemObject.FolderExists ' - FileSystemObject.CreateFolder ' - FileSystemObject.CreateTextFile ' - Folders.Add ' - Folder.CreateTextFile ' - TextStream.WriteLine ' - TextStream.Close '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function BuildTestDirectory(FSO) Dim TestFolder Dim SubFolders Dim SubFolder Dim TextStream ' Salir si (a) la unidad no existe, o si (b) ya existe el directorio ' generado. If Not FSO.DriveExists(TestDrive) Then BuildTestDirectory = False Exit Function End If If FSO.FolderExists(TestFilePath) Then BuildTestDirectory = False Exit Function End If Set TestFolder = FSO.CreateFolder(TestFilePath) Set TextStream = FSO.CreateTextFile(TestFilePath & "\ReadMe.txt") TextStream.WriteLine("Mi colección de letras de canciones") TextStream.Close Set SubFolders = TestFolder.SubFolders Set SubFolder = SubFolders.Add("Beatles") CreateLyrics SubFolder BuildTestDirectory = True End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''La rutina principal
' Primero, crea un directorio de prueba, junto con algunas subcarpetas ' y archivos. Entonces, vuelca alguna información sobre las unidades ' de disco disponibles y sobre el directorio de prueba y después, ' limpia todo de nuevo. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub Main Dim FSO ' Configurar datos globales. TabStop = Chr(9) NewLine = Chr(10)
Set FSO = CreateObject("Scripting.FileSystemObject") If Not BuildTestDirectory(FSO) Then Print "El directorio de prueba ya existe o no se puede crear. No puede continuar." Exit Sub End If Print GenerateDriveInformation(FSO) & NewLine & NewLine Print GenerateTestInformation(FSO) & NewLine & NewLine Print GetLyrics(FSO) & NewLine & NewLine DeleteTestDirectory(FSO) End Sub
Ayuda de Javascript y Vbscript para Javascripts.astalaweb.com. |