Tutorial: Manipular archivos y directorios en Visual Basic
Actualización: noviembre 2007
Este tutorial ofrece una introducción a los fundamentos de la E/S de archivos en Microsoft Visual Basic 2005. Para ilustrar las características, crea una pequeña aplicación, denominada FileExplorer, que examina archivos de texto en un directorio y proporciona información tal como los atributos, hora del último acceso y los primeros 80 caracteres del archivo. También incluye una opción que escribe la información en un archivo de registro.
Nota: |
---|
Las opciones disponibles en los cuadros de diálogo, y los nombres y ubicaciones de los comandos de menú que se ven podrían diferir de lo que se describe en la Ayuda, según los valores de configuración o de edición activos. Esta página de Ayuda se ha redactado teniendo en cuenta la Configuración general de desarrollo. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio. |
Crear la aplicación
Para iniciar el proyecto, cree un formulario en el que los usuarios puedan seleccionar un directorio, un archivo del directorio y, a continuación, la información sobre el archivo que desean recuperar.
Para crear el proyecto
En el menú Archivo, haga clic en Nuevoproyecto.
Aparecerá el cuadro de diálogo Nuevo proyecto.
En el panel Tipos de proyecto, haga clic en Proyectos de Visual Basic y, a continuación, elija Aplicación para Windows en el panel Plantillas.
En el cuadro Nombre, escriba FileExplorer como nombre del proyecto.
Visual Studio agregará el proyecto al Explorador de soluciones y se abrirá el Diseñador de Windows Forms.
Agregue los controles de la siguiente tabla al formulario y establezca los correspondientes valores para sus propiedades.
Objeto
Propiedades
Valor
Name
Text
txtDirectory
Directorio
Name
Text
btnSubmit
Enviar
Name
Text
btnExamine
Examinar
Name
Text
lstFilePick
Seleccione un archivo
Name
Text
Checked
chkFileLength
Longitud del archivo
True
Name
Text
Checked
chkLastAccess
Hora del último acceso
True
Name
Text
Checked
chkSave
Guardar resultados
False
Mostrar el directorio actual
La aplicación FileExplorer necesita un punto de inicio. En consecuencia, el control txtDirectoryTextBox utiliza la función My.Computer.FileSystem.CurrentDirectory para devolver y mostrar una cadena que representa la ruta de acceso actual.
Para devolver el directorio actual
Haga doble clic en el formulario para crear un controlador de eventos para Form1_Load.
Se abrirá el Editor de código.
Agregue el código siguiente para que el control txtDirectoryTextBox muestre la ubicación actual.
txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
Ejecute el programa para comprobar que se devuelve la ruta de acceso correcta.
El control txtDirectoryTextBox muestra el directorio actual.
Cambiar directorios
Dado que es posible que un usuario desee seleccionar archivos de un directorio diferente, la aplicación utiliza la misma propiedad para cambiar de directorio. Para cambiar a un directorio diferente, el usuario escribe una nueva ruta de acceso en el control txtDirectoryTextBox.
Para cambiar de directorio
Haga doble clic en el control del formulario para crear un controlador de eventos clic para btnSubmit.
Se abrirá el Editor de código.
Agregue el código siguiente al controlador de eventos clic.
Dim NewPath As String ' NewPath holds the path the user has entered. NewPath = txtDirectory.Text ' Change the location to NewPath. My.Computer.FileSystem.CurrentDirectory = NewPath
Comprobar si se escribió una ruta de acceso válida
Utilice una instrucción Try...Catch para detectar excepciones que surgen de escribir una ruta de acceso en blanco o no válida.
Para garantizar rutas de acceso válidas
En el evento btnSubmit_Click, después de la línea de código Dim NewPath As String, agregue Dim ErrorMessage As String en una nueva línea.
Antes de la línea de código My.Computer.FileSystem.CurrentDirectory = NewPath, agregue una instrucción Try en su propia línea, como se indica a continuación. Si presiona la tecla de retorno, el Editor de código insertará automáticamente las instrucciones Catch ex As Exception y End Try. Quítelas, agregará las suyas propias en el paso siguiente.
Try
Después de la línea de código My.Computer.FileSystem.CurrentDirectory = NewPath, agregue lo siguiente:
' This checks to make sure the path is not blank. Catch ex As Exception When NewPath = "" ErrorMessage = "You must enter a path." ' This catches errors caused by a path that is not valid. Catch ErrorMessage = "You must enter a valid path. If trying " & _ "to access a different drive, remember to include the drive " & _ "letter." Finally ' Display the error message only if one exists. If ErrorMessage <> Nothing Then MsgBox(ErrorMessage) End If End Try
Mostrar el contenido del directorio en un control ComboBox
Para permitir que la aplicación muestre el contenido del directorio actual, puede utilizar el método My.Computer.FileSystem.GetFiles, que devuelve una colección de cadenas que representan los nombres de los archivos en el directorio. Puede utilizar comodines con GetFiles para seleccionar sólo archivos de un modelo determinado. En este ejemplo, sólo se devuelven los archivos que tienen la extensión .txt.
Para mostrar el contenido del directorio
Al principio del evento btnSubmit_Click, inserte lo siguiente.
Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).
Después de que la línea End Try, inserte lo siguiente.
fileList = My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.CurrentDirectory, _ FileIO.SearchOption.SearchTopLevelOnly, "*.txt") For Each foundFile As String In fileList lstFilePick.Items.Add(foundFile) Next
La información recopilada aparece en el control lstFilePickComboBox, en el que podrá seleccionar un archivo específico para examinarlo.
Para probar la aplicación, ejecútela primero en un directorio que no contenga archivos .txt y, a continuación, en uno que contenga más de un archivo .txt. En el primer caso, la aplicación muestra el mensaje de error correspondiente. En el segundo, la aplicación crea, en el control ComboBox, una lista de todos los archivos .txt del directorio especificado en el control txtDirectoryTextBox.
Permitir que el usuario seleccione un archivo para examinarlo
Aunque el control lstFilePickComboBox muestra todos los archivos de un directorio, es probable que el usuario desee seleccionar y examinar un archivo específico.
Para habilitar la selección de un archivo concreto
Cree un controlador de evento clic para btnExamine_Click y agregue el código siguiente para confirmar la selección de un archivo.
Dim thisFile As System.IO.FileInfo thisFile = My.Computer.FileSystem.GetFileInfo(CStr(lstFilePick.SelectedItem))
Permitir que el usuario determine la información que desea recopilar
Una vez que se muestran los archivos en el control lstFilePickComboBox, el código adicional permite que el usuario especifique la información de la que se informa. Por ejemplo, es posible que un usuario sólo desee saber la fecha en la que se tuvo acceso al archivo por última vez. Es posible que otro usuario desee conocer también el tamaño de un archivo. Los usuarios pueden activar o desactivar las casillas de verificación (chkLastAccess, chkFileLength) para personalizar los resultados.
Para mostrar información específica
Declare estas variables al principio del evento btnExamine_Click después de (lstFilePick.SelectedItem):
Dim stringlength As String stringLength = "The file's length, in bytes, is: " Dim stringLastAccess As String stringLastAccess = "The file was last accessed on: " Dim LastAccess As Date Dim Length As Long Dim FirstLine As String = "" Dim FinalString As String = "" Dim NewName As String NewName = CType(lstFilePick.SelectedItem, String) If NewName = Nothing Then MsgBox("You must select a file to examine.") Exit Sub End If
El método My.Computer.FileSystem.GetFileInfo devuelve un objeto FileInfo que se puede consultar para obtener información sobre un archivo.
Agregue el código siguiente al final del evento btnExamine_Click.
' Check last access time. If chkLastAccess.Checked = True Then LastAccess = thisFile.LastAccessTime End If
La propiedad LastAccessTime determina la hora del último acceso al archivo. El valor Date devuelto indica la fecha y la hora en que se creó un archivo o en que fue modificado por última vez.
Agregue el código siguiente al final del evento btnExamine_Click.
' Check Length. If chkFileLength.Checked = True Then Length = thisFile.Length End If
La propiedad Length, que determina la longitud del archivo, devuelve un valor de tipo Long que especifica la longitud del archivo en bytes.
Mostrar los resultados
Para completar la funcionalidad de la aplicación, un MsgBox informa de la información recopilada.
Para mostrar los resultados
Al final de la instrucción If que determina si se ha activado o no el control chkLastAccessCheckBox, agregue lo siguiente antes de la instrucción End If final.
' Add to the messagebox. FinalString = FinalString & stringLastAccess & LastAccess & "." _ & vbCrLf
Al final de la instrucción If que determina si se ha activado o no el control chkFileLengthCheckBox, agregue lo siguiente antes de la instrucción End If final.
' Add to the messagebox. FinalString = FinalString & stringlength & CStr(Length) & "." _ & vbCrLf
Al final de la instrucción If que determina si se ha activado o no el control chkFirstLineCheckBox, agregue lo siguiente antes de la instrucción End If final.
' Add to the messagebox. FinalString &= FirstLine & vbCrLf
Guardar los resultados
Es posible que el usuario desee guardar los resultados de examinar un archivo. En consecuencia, debe agregar código que compruebe si existe un archivo de registro, cree uno si es necesario y, a continuación, escriba los resultados en el archivo de registro.
Para crear un archivo de registro:
Agregue lo siguiente al final del evento btnExamine_Click.
' Check to see if results should be saved. If chkSave.Checked = True And FinalString <> "" Then My.Computer.FileSystem.WriteAllText("log.txt", FinalString, True) End If
Para probar la aplicación
En el directorio de su elección, cree un archivo de texto denominado test.txt con la primera línea siguiente:
"Ésta es la primera línea del primer archivo. La aplicación FileExplorer sólo examina archivos de texto."
En el mismo directorio, cree un segundo archivo de texto denominado test2.txt con la primera línea siguiente:
"Ésta es la primera línea del segundo archivo. La aplicación FileExplorer sólo examina archivos de texto."
Inicie la aplicación.
Escriba una ruta de acceso no válida y haga clic en Enviar.
Aparecerá el siguiente mensaje: "You must enter a valid path. If trying to access a different drive, remember to include the drive letter."
Escriba la ruta de acceso al directorio que almacena test.txt y haga clic en Enviar.
El control lstFilePickComboBox mostrará los archivos de texto.
Seleccione test.txt en el control lstFilePickComboBox. Asegúrese de que están activadas todas las casillas de verificación y, a continuación, haga clic en Examinar.
El formulario de resultados incluye la fecha del último acceso y la longitud.
Seleccione test2.txt en el control lstFilePickComboBox, desactive todas las casillas de verificación y, a continuación, haga clic en Examinar.
Aparecerá el siguiente mensaje de error : "No file attribute checkboxes selected."
Seleccione Hora del último acceso y Guardar resultados, y haga clic en Examinar.
El formulario de resultados muestra sólo la hora del último acceso.
Cierre FileExplorer.
Dado que activó la opción Guardar resultados, FileExplorer generó un archivo de registro denominado log.txt en el mismo directorio que los archivos de texto.
Para comprobar el registro
- En el directorio actual, abra log.txt y confirme que FileExplorer registró la información correcta.