Tutorial: Manipular archivos utilizando métodos de .NET Framework (Visual Basic)

En este tutorial se muestra cómo abrir y leer un archivo mediante la clase StreamReader, comprobar si se ha tenido acceso a un archivo, buscar una cadena dentro de un archivo leído con una instancia de la clase StreamReader y escribir en un archivo mediante la clase StreamWriter.

Nota:

Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.

Crear la aplicación

Inicie Visual Studio y comience el proyecto mediante la creación de un formulario que el usuario pueda usar para escribir en el archivo designado.

Para crear el proyecto

  1. En el menú Archivo, seleccione Nuevo proyecto.

  2. En el panel Nuevo proyecto, haga clic en Aplicación Windows.

  3. En el cuadro Nombre, escriba MyDiary y haga clic en Aceptar.

    Visual Studio agrega el proyecto al Explorador de soluciones y se abre el Diseñador de Windows Forms.

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

Object Propiedades Valor
Button Nombre

Texto
Submit

Enviar entrada
Button Nombre

Texto
Clear

Borrar entrada
TextBox Nombre

Texto

Multiline
Entry

Escriba algo.

False

Escribir en el archivo

Para agregar la capacidad de escribir en un archivo a través de la aplicación, use la clase StreamWriter. La clase StreamWriter está diseñada para la salida de caracteres en una codificación determinada, mientras que la clase Stream está diseñada para la entrada y la salida de bytes. Use la clase StreamWriter para escribir líneas de información en un archivo de texto estándar. Para más información sobre la clase StreamWriter, vea StreamWriter.

Para agregar funcionalidad de escritura

  1. En el menú Vista, seleccione Código para abrir el Editor de código.

  2. Dado que la aplicación hace referencia al espacio de nombres System.IO, agregue las instrucciones siguientes al principio del código, antes de la declaración de clase del formulario, que empieza con Public Class Form1.

    Imports System.IO
    

    Antes de escribir en el archivo, debe crear una instancia de una clase StreamWriter.

  3. En el menú Vista, seleccione Diseñador para volver al Diseñador de Windows Forms. Haga doble clic en el botón Submit para crear un controlador de eventos Click para el botón y, después, agregue el código siguiente.

    Dim fw As StreamWriter
    

Nota

El entorno de desarrollo integrado (IDE) de Visual Studio volverá al Editor de código y colocará el punto de inserción en el controlador de eventos donde debe agregar el código.

  1. Para escribir en el archivo, use el método Write de la clase StreamWriter. Agregue el código siguiente justo después de Dim fw As StreamWriter. No se preocupe si se produce una excepción porque no se encuentra el archivo, ya que se creará en caso de que todavía no exista.

    Dim ReadString As String
    Try
        'Pass the file path and name to the StreamWriter constructor.
        'Indicate that Append is True, so file will not be overwritten.
        fw = New StreamWriter("C:\MyDiary.txt", True)
        ReadString = Entry.Text
        fw.WriteLine(ReadString)
    Finally
        'Close the file.
        fw.Close()
    End Try
    
  2. Asegúrese de que el usuario no puede enviar una entrada en blanco mediante la adición del código siguiente justo después de Dim ReadString As String.

    If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then
        Entry.Text = "Please enter something."
        Return
    End If
    
  3. Como se trata de una agenda, el usuario querrá asignar una fecha a cada entrada. Inserte el siguiente código después de fw = New StreamWriter("C:\MyDiary.txt", True) para establecer la variable Today en la fecha actual.

    Dim Today As DateTime
    Today = Now
    fw.Write(CStr(Today))
    fw.Write(ControlChars.CrLf)
    
  4. Por último, adjunte el código para borrar TextBox. Agregue el código siguiente al evento Click del botón Clear.

    Entry.Text = ""
    

Agregar características de visualización a la agenda

En esta sección, agregará una característica que muestra la entrada más reciente de DisplayEntryTextBox. También puede agregar una clase ComboBox que muestra varias entradas, de entre las cuales un usuario puede seleccionar una entrada para mostrarla en DisplayEntryTextBox. Una instancia de la clase StreamReader lee de MyDiary.txt. Como la clase StreamWriter, StreamReader está diseñado para usarlo con archivos de texto.

Para esta sección del tutorial, agregue los controles de la siguiente tabla al formulario y establezca los valores correspondientes para sus propiedades.

Control Propiedades Valores
TextBox Nombre

Visible

Tamaño

Multiline
DisplayEntry

False

120,60

True
Button Nombre

Texto
Display

Pantalla
Button Nombre

Texto
GetEntries

Obtener entradas
ComboBox Nombre

Texto

Habilitado
PickEntries

Seleccione una entrada

False

Para rellenar el cuadro combinado

  1. El control PickEntriesComboBox se usa para mostrar las fechas en las que el usuario envía cada entrada, de modo que el usuario pueda seleccionar una entrada de una fecha concreta. Cree un controlador de eventos Click para el botón GetEntries y agréguele el siguiente código.

    Dim fr As StreamReader = Nothing
    Dim FileString As String
    FileString = ""
    Try
        fr = New System.IO.StreamReader("C:\MyDiary.txt")
        PickEntries.Items.Clear()
        PickEntries.Enabled = True
        Do
            FileString = fr.ReadLine
            If IsDate(FileString) Then
                PickEntries.Items.Add(FileString)
            End If
        Loop Until (FileString Is Nothing)
    Finally
        If fr IsNot Nothing Then
            fr.Close()
        End If
    End Try
    PickEntries.Enabled = True
    
  2. Para probar el código, presione F5 para compilar la aplicación y, después, haga clic en Obtener entradas. Haga clic en la flecha desplegable en ComboBox para mostrar las flechas de entrada.

Para seleccionar y mostrar entradas individuales

  1. Cree un controlador de eventos Click para el botón Display y agregue el código siguiente.

    Dim fr As StreamReader
    Dim ReadString As String
    'Make sure ReadString begins empty.
    ReadString = ""
    Dim FileString As String
    fr = New StreamReader("C:\MyDiary.txt")
    'If no entry has been selected, show the whole file.
    If PickEntries.Enabled = False Or PickEntries.SelectedText Is Nothing Then
        Do
            'Read a line from the file into FileString.
            FileString = fr.ReadLine
            'add it to ReadString
            ReadString = ReadString & ControlChars.CrLf & FileString
        Loop Until (FileString = Nothing)
    Else
        'An entry has been selected, find the line that matches.
        Do
    
            FileString = fr.ReadLine
        Loop Until FileString = CStr(PickEntries.SelectedItem)
        FileString = CStr(PickEntries.SelectedItem) & ControlChars.CrLf
        ReadString = FileString & fr.ReadLine
    
        'Read from the file until EOF or another Date is found.
        Do Until ((fr.Peek < 0) Or (IsDate(fr.ReadLine)))
            ReadString = ReadString & fr.ReadLine
        Loop
    End If
    fr.Close()
    DisplayEntry.Visible = True
    DisplayEntry.Text = ReadString
    
  2. Para probar el código, pulse F5 para compilar la aplicación y, después, envíe una entrada. Haga clic en Obtener entradas, seleccione una entrada de ComboBox y, después, haga clic en Mostrar. El contenido de la entrada seleccionada aparece en DisplayEntryTextBox.

Permitir que los usuarios eliminen o modifiquen entradas

Por último, puede incluir funcionalidad adicional para permitir que los usuarios eliminen o modifiquen una entrada mediante los botones DeleteEntry y EditEntry. Ambos botones permanecen deshabilitados a menos que se muestre una entrada.

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

Control Propiedades Valores
Button Nombre

Texto

Habilitado
DeleteEntry

Eliminar entrada

False
Button Nombre

Texto

Habilitado
EditEntry

Editar entrada

False
Button Nombre

Texto

Habilitado
SubmitEdit

Enviar edición

False

Para habilitar la eliminación y la modificación de entradas

  1. Agregue el código siguiente al evento Click del botón Display, después de DisplayEntry.Text = ReadString.

    DeleteEntry.enabled = True
    
  2. Cree un controlador de eventos Click para el botón DeleteEntry y agregue el código siguiente.

    Dim fr As StreamReader
    Dim ReadString As String
    Dim WriteString As String
    Dim ConfirmDelete As MsgBoxResult
    fr = New StreamReader("C:\MyDiary.txt")
    ReadString = fr.ReadLine
    ' Read through the textfile
    Do Until (fr.Peek < 0)
        ReadString = ReadString & vbCrLf & fr.ReadLine
    Loop
    WriteString = Replace(ReadString, DisplayEntry.Text, "")
    fr.Close()
    ' Check to make sure the user wishes to delete the entry
    ConfirmDelete = MsgBox("Do you really wish to delete this entry?",
      MsgBoxStyle.OKCancel)
    If ConfirmDelete = MsgBoxResult.OK Then
        File.Delete("C:\MyDiary.txt")
        Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt")
        fw.WriteLine(WriteString)
        fw.Close()
        ' Reset controls on the form
        DisplayEntry.Text = ""
        PickEntries.Text = ""
        PickEntries.Items.Clear()
        PickEntries.Enabled = False
        DeleteEntry.Enabled = False
    End If
    
  3. Cuando un usuario muestra una entrada, se habilita el botón EditEntry. Agregue el código siguiente al evento Click del botón Display después de DisplayEntry.Text = ReadString.

    EditEntry.Enabled = True
    
  4. Cree un controlador de eventos Click para el botón EditEntry y agregue el código siguiente.

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. Cree un controlador de eventos Click para el botón SubmitEdit y agregue el código siguiente.

    Dim fr As StreamReader
    Dim ReadString As String
    Dim WriteString As String
    If Entry.Text = "" Then
        MsgBox("Use Delete to Delete an Entry")
        Return
    End If
    fr = New StreamReader("C:\MyDiary.txt")
    ReadString = fr.ReadLine
    Do Until (fr.Peek < 0)
        ReadString = ReadString & vbCrLf & fr.ReadLine
    Loop
    WriteString = Replace(ReadString, DisplayEntry.Text, Entry.Text)
    fr.Close()
    File.Delete("C:\MyDiary.txt")
    Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt")
    fw.WriteLine(WriteString)
    fw.Close()
    DisplayEntry.Text = Entry.Text
    Entry.Text = ""
    EditEntry.Enabled = False
    SubmitEdit.Enabled = False
    

Para probar el código, pulse F5 para compilar la aplicación. Haga clic en Obtener entradas, seleccione una entrada y, después, haga clic en Mostrar. La entrada aparece en DisplayEntryTextBox. Haga clic en Editar entrada. La entrada aparece en EntryTextBox. Edite la entrada de EntryTextBox y haga clic en Submit Edit (Enviar edición). Abra el archivo MyDiary.txt para confirmar la corrección. Seleccione una entrada y haga clic en Eliminar entrada. Cuando MessageBox solicite confirmación, haga clic en Aceptar. Cierre la aplicación y abra MyDiary.txt para confirmar la eliminación.

Vea también