Foros del Web » Programación para mayores de 30 ;) » .NET »

Eliminar una linea de un archivo de texto

Estas en el tema de Eliminar una linea de un archivo de texto en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/03/2005, 11:29
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Eliminar una linea de un archivo de texto

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.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 01/03/2005, 13:26
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Lo que podrías hacer para mantener la estructura del archivo es escribir (a través del método WriteLine del StreamWriter) al archivo cada vez que lees una línea, así te evitas de concatenar el texto. También déjalo en el Enconding por defecto (si mal no recuerdo es el UTF-8) para escribir el archivo.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 02/03/2005, 08:52
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Gracias por la respuesta, lo que pasa es que al ser el mismo archivo no puedo estar leyéndolo con el objeto StreamReader a la vez que lo escribo con el StreamWriter. A no ser, claro está, que lo lea por completo almacenándolo en no se qué tipo de variable, no valdría String, y luego reescribirlo con el objeto StreamWriter, o algo así, yo que se ...

Hay algo de lectura y escritura asíncrona que creo que es donde está la clave.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #4 (permalink)  
Antiguo 02/03/2005, 09:07
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Bueno, el problema parece que está solucionado, al menos de momento.

He utilizado el código que puse al principio, sólo que con vbCrLf en lugar de vbNewLine y todos los objetos con codificación por defecto. Aunque pensaba que esto ya lo había hecho antes, parece ser que no.

En fin, cosas de los compiuters.

Muchas gracias.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:09.