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

  1. En el menú Archivo, haga clic en Nuevoproyecto.

    Aparecerá el cuadro de diálogo Nuevo proyecto.

  2. 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.

  3. 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.

  4. Agregue los controles de la siguiente tabla al formulario y establezca los correspondientes valores para sus propiedades.

    Objeto

    Propiedades

    Valor

    TextBox

    Name

    Text

    txtDirectory

    Directorio

    Button

    Name

    Text

    btnSubmit

    Enviar

    Button

    Name

    Text

    btnExamine

    Examinar

    ComboBox

    Name

    Text

    lstFilePick

    Seleccione un archivo

    CheckBox

    Name

    Text

    Checked

    chkFileLength

    Longitud del archivo

    True

    CheckBox

    Name

    Text

    Checked

    chkLastAccess

    Hora del último acceso

    True

    CheckBox

    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

  1. Haga doble clic en el formulario para crear un controlador de eventos para Form1_Load.

    Se abrirá el Editor de código.

  2. Agregue el código siguiente para que el control txtDirectoryTextBox muestre la ubicación actual.

    txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
    
  3. 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

  1. Haga doble clic en el control del formulario para crear un controlador de eventos clic para btnSubmit.

    Se abrirá el Editor de código.

  2. 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

  1. 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.

  2. 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
    
  3. 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

  1. Al principio del evento btnSubmit_Click, inserte lo siguiente.

    Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).

  2. 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

  1. 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.

  2. 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.

  1. 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

  1. 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
    
  2. 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
    
  3. 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

  1. 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."

  2. 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."

  3. Inicie la aplicación.

  4. 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."

  5. Escriba la ruta de acceso al directorio que almacena test.txt y haga clic en Enviar.

    El control lstFilePickComboBox mostrará los archivos de texto.

  6. 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.

  7. 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."

  8. 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.

  9. 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.

Vea también

Referencia

My.Computer.FileSystem.CurrentDirectory (Propiedad)

My.Computer.FileSystem.GetFileInfo (Método)