Archivos de Texto . Archivos de Texto ................................................................................................................................... 1 1.EscribirarchivosdeTexto............................................................................................................................ 1 1.1.Escribirenun archivodeTexto ............................................................................................................... 1 1.2.Métodospara almacenardatosenunarchivedeTexto................................................................................... 1 2.Leerunarchivo deTexto............................................................................................................................. 2 2.1.Métodospara leerdatosdeunarchivodeTexto........................................................................................... 2 3.MétodosparacerraryliberarunarchivodeTexto................................................................................................. 2 Ejercicio................................................................................................................................................... 3 4.Cuidadoconla codificacióndelosficheros......................................................................................................... 5
1. Escribir archivos de Texto Visual Basic incluye para manipular archivos de texto varias Clases, entre las que se encuentran StreamWriter y StreamReader. Sólo una de ellas puede tener acceso al archivo en cada momento. Si se necesita leer y escribir simultáneamente en un mismo archivo, es mejor intentar desarrollar una Base de Datos.
1.1. Escribir en un archivo de Texto Para escribir en un archivo de Texto utilizaremos la Clase StreamWriter . El primer paso para utilizar esta Clase será declarar un Objeto a partir de ella, como en este ejemplo: Formato-1: Crea un archivo Nuevo y si existe uno con el mismo nombre lo destruye, perdiéndose toda la información. Dim Objeto As New System.IO. StreamWriter(“c:\Texto.txt”) Formato-2: Con este formato se abrirá el archivo existente (o se creará si no existe) y las operaciones de escritura se efectuarán detrás de cualquier contenido previo Dim Objeto As New System.IO. StreamWriter(“c:\Texto.txt”, True)
1.2. Métodos para almacenar datos en un archive de Texto • Write(Cualquier dato de tipo String, como una Cadena, un Texto, una C. Texto….. )
1
Envía la información al archivo pero no inserta un salto de línea al final. • WriteLine(Cualquier dato de tipo String, como una Cadena, un Texto, una C. Texto…) Envía una sola línea de texto al archivo y crea automáticamente un salto de línea al final. Cada ejecución de este método crea una línea nueva en el archivo de texto.
2. Leer un archivo de Texto Para leer en un archivo de Texto utilizaremos la Clase StreamReader . En primer lugar tendremos que definir un Objeto de este tipo a partir de la siguiente definición: Dim Objeto As New System.IO. StreamReader(“c:\Texto.txt”) Es importante tener en cuenta que si StreamReader no encuentra el archivo, generará una excepción, que tendremos que gestionar en nuestro código con el bloque Try… Match. Este bloque siempre debe estar cuando se trata del uso de ficheros.
2.1. Métodos para leer datos de un archivo de Texto • ReadLine() Se lee línea por línea. • ReadToEnd() Este método lee el archivo completo y almacena su contenido en una variable String.
3. Métodos para cerrar y liberar un archivo de Texto • Objeto.Close() Es absolutamente imprescindible que cerremos los archivos de texto cuando terminemos de trabajar con ellos y eso es precisamente lo que hace este método.
• Objeto.Dispose() Con este método aseguramos que el archivo queda completamente liberado.
2
Ejercicio
Public Class Form1 Dim boton As Byte = 0 Dim sw As Boolean = False Private Sub Bcrear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bcrear.Click boton = 1 Label2.Visible = False Tlectura.Visible = False Label1.Visible = True T.Visible = True T.Focus() End Sub Private Sub T_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles T.KeyPress Static obj As Object = Nothing Dim texto As String Try
3
If sw = False Then If boton = 1 Then obj = New System.IO.StreamWriter("c:\Texto.txt") Else obj = New System.IO.StreamWriter("c:\Texto.txt", True) End If sw = True End If If e.KeyChar = Chr(13) Then texto = T.Text obj.WriteLine(texto) T.Text = "" T.Focus() End If If e.KeyChar = Chr(27) Then obj.Close() obj.Dispose() sw = False Label1.Visible = False T.Visible = False boton = 0 End If Catch ex As NullReferenceException MessageBox.Show(ex.Message) End Try End Sub Private Sub T_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T.TextChanged End Sub Private Sub Bleer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bleer.Click Dim ObjetoFichero As New System.IO.StreamReader("c:\Texto.txt") Label2.Visible = True Tlectura.Visible = True Tlectura.Text = ObjetoFichero.ReadToEnd ObjetoFichero.Close() ObjetoFichero.Dispose() End Sub Private Sub Bfin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bfin.Click End End Sub Private Sub Ba単adir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ba単adir.Click
4
boton = 2 Label2.Visible = False Tlectura.Visible = False Label1.Visible = True T.Visible = True T.Focus() End Sub End Class
4. Cuidado con la codificación de los ficheros. En . Net la codificación de los ficheros de texto es UTF-8 Unicode como predeterminada, pudiendo admitir los caracteres propios del idioma (como la ñ). El problema es que si guardamos un fichero de texto con codificación ANSI (por ejemplo, al utilizar el NotePad) y lo abrimos en UTF-8, los caracteres especiales no aparecerán, ya que los códigos usados en uno y otro sistema para estos caracteres son distintos. La misma afirmación es válida si el proceso es de UTF-8 a ANSI. Si leemos un archivo de texto en ASCII que contenga una Ñ se perderá. Dim ftexto As StreamReader ftexto = New StreamReader(“c:\textoascii.txt”) Caja.Text = ftexto.ReadToEnd() ftexto.Close() Lo solucionamos: Dim ftexto As StreamReader ftexto = New StreamReader(“c:\textoascii.txt”, Encoding.Default) caja.Text = ftexto.ReadToEnd() ftexto.Close()
5