Share via


Tutorial: Manipular archivos utilizando métodos de .NET Framework

Actualización: noviembre 2007

Este tutorial muestra cómo abrir y leer un archivo utilizando la clase StreamReader, comprobar si se está teniendo 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 utilizando la clase StreamWriter.

Nota:

  Las opciones disponibles en los cuadros de diálogo, y los nombres y las ubicaciones de los comandos de menú que se ven podrían diferir de lo que se describe en la Ayuda, en función de 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

Inicie Visual Studio y comience el proyecto creando un formulario que el usuario pueda utilizar 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 para 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 correspondientes valores para sus propiedades.

    Objeto

    Propiedades

    Valor

    Button

    Name

    Text

    Submit

    Submit Entry

    Button

    Name

    Text

    Clear

    Clear Entry

    TextBox

    Name

    Text

    Multiline

    Entry

    Please enter something.

    False

Escribir en el archivo

Para agregar la capacidad de escribir en un archivo a través de la aplicación, utilice la clase StreamWriter. StreamWriter está diseñado para producir los caracteres de resultado en una codificación particular, mientras que la clase Stream está diseñada para la entrada y salida de bytes. Utilice StreamWriter para escribir líneas de información en un archivo de texto estándar. Para obtener más información sobre la clase StreamWriter, vea StreamWriter (Clase).

Para agregar la funcionalidad de escritura

  1. En el menú Ver, elija 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 siguientes instrucciones al principio del código, antes de la declaración de código del formulario, que empieza por Public Class Form1.

    Imports System
    Imports System.IO
    

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

  3. En el menú Ver, elija 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, a continuación, agréguele 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 dentro del controlador de eventos donde debe agregar el código.

  1. Para escribir en el archivo, utilice el método Write de la clase StreamWriter. Agregue el código siguiente directamente después de Dim fw As StreamWriter: No debe preocuparse por que se produzca una excepción si el archivo no existe, porque se creará si no existe ya.

    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 pueda enviar una entrada en blanco agregando el código siguiente inmediatamente 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. Dado que se trata de un diario, el usuario deseará asignar una fecha a cada entrada. Inserte el código siguiente 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, anexe código para borrar el cuadro de texto TextBox. Agregue el código siguiente al evento Click del botón Clear.

    Entry.Text = ""
    

Agregar características de presentación al diario

En esta sección, debe agregar una característica que muestra la última entrada del TextBoxDisplayEntry. También puede agregar un cuadro combinado ComboBox que muestra varias entradas y desde el que un usuario puede seleccionar una entrada que mostrar en el TextBoxDisplayEntry. Una instancia de la clase StreamReader lee de MyDiary.txt. Al igual que la clase StreamWriter, StreamReader está pensado para su uso con archivos de texto.

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

Control

Propiedades

Valores

TextBox

Name

Visible

Size

Multiline

DisplayEntry

False

120,60

True

Button

Name

Text

Display

Display

Button

Name

Text

GetEntries

Obtener entradas

ComboBox

Name

Text

Enabled

PickEntries

Select an Entry

False

Para rellenar el cuadro combinado

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

    Dim fr As StreamReader
    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 haga clic en Obtener entradas. Haga clic en la flecha desplegable del ComboBox para mostrar las fechas de entrada.

Para elegir y mostrar entradas individuales

  1. Cree un controlador de eventos Click para el botón Display y agréguele 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, presione F5 para compilar la aplicación y envíe una entrada. Haga clic en Obtener entradas, seleccione una entrada en el ComboBox y haga clic en Display. El contenido de la entrada seleccionada aparecerá en el TextBoxDisplayEntry.

Permitir a los usuarios a eliminar o modificar entradas

Finalmente, puede incluir funcionalidad adicional para permitir que los usuarios eliminen o modifiquen una entrada utilizando los botones DeleteEntry y EditEntry. Ambos botones permanecen deshabilitados a menos que se esté mostrando una entrada.

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

Control

Propiedades

Valores

Button

Name

Text

Enabled

DeleteEntry

Eliminar entrada

False

Button

Name

Text

Enabled

EditEntry

Editar entrada

False

Button

Name

Text

Enabled

SubmitEdit

Enviar edición

False

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

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

    DeleteEntry.enabled = True
    
  2. Cree un controlador de eventos Click para el botón DeleteEntry y agréguele 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 controlador de eventos Click del botón Display, a continuación de DisplayEntry.Text = ReadString.

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

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. Cree un controlador de eventos Click para el botón SubmitEdit y agréguele 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, presione F5 para compilar la aplicación. Haga clic en Obtener entradas, seleccione una entrada y, a continuación, haga clic en Display. La entrada aparece en el TextBoxDisplayEntry. Haga clic en Editar entrada. La entrada aparece en el TextBoxEntry. Edite la entrada del TextBoxEntry y haga clic en Enviar edición. Abra el archivo MyDiary.txt para confirmar la corrección. Seleccione una entrada y haga clic en Eliminar entrada. Cuando el MessageBox solicite confirmación, haga clic en Aceptar. Cierre la aplicación y abra MyDiary.txt para confirmar la eliminación.

Vea también

Referencia

StreamReader

StreamWriter

Otros recursos

Tutoriales del lenguaje Visual Basic