Hola. Para leer un archivo de texto utilizo un StreamReader con la codificación System.Text.Encoding.Default. Esta es la única manera en la que me funcionaban ciertas operaciones que hacía al leerlo línea por línea, ya que el archivo se generaba en un sistema Linux.
El caso es que lo que quiero es, en otro caso, eliminar una sóla línea del archivo. He intentado ir leyendo linea por linea y meterlas en una cadena de texto salvo la que quería eliminar. Luego esa cadena la escribía en un StreamWriter.
Código:
Dim nombre As String = idArchivo & ".txt"
Dim ruta As String = rutaArchivos & "\" & nombre
Dim objSR As StreamReader
Dim texto As String
Dim linea As String
Try
objSR = New StreamReader(ruta, System.Text.Encoding.Default)
Catch ex As FileLoadException
Throw New Exception("No se ha podido cargar el archivo " & ruta)
Catch ex As FileNotFoundException
Throw New Exception("No se ha podido encontrar el archivo " & ruta)
Catch ex As Exception
Throw New Exception("Error desconocido en " & ruta)
End Try
linea = objSR.ReadLine
Do Until linea = ""
If linea.IndexOf("cadena_a_buscar", 12, 12) <> 12 Then
texto += linea & vbNewLine
End If
linea = objSR.ReadLine
Loop
objSR.Close()
Dim objSW As New StreamWriter(ruta, False, System.Text.UTF7Encoding.UTF7)
objSW.Write(texto)
El archivo resultante queda sin la línea en la que estaba la cadena_a_buscar pero algo distinto, porque al volver a abrirlo las longitudes de cada línea (que deberían ser fijas) cambian y no funcionan ciertas operaciones que se hacían con cada una.
¿Dónde está el problema?¿En
vbNewLine?¿O en el sistema de codificación?
Muchas gracias.