Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mester en 7 Noviembre 2015, 23:10 pm



Título: Eliminar una linea concreta de un fichero
Publicado por: mester en 7 Noviembre 2015, 23:10 pm
Hola buenas, no sé como podría borrar una línea entera de un fichero.
Para hacer esto he leido el fichero entero guardando cada línea en un vector de dos dimensiones, saltandome la línea que quería eliminar, y posteriormente eliminando el fichero para crear otro. Pero busco algo más eficiente, para poder hacerlo en ficheros grandes y tal. ¿Como podría eliminar una fila concreta?


Título: Re: Eliminar una linea concreta de un fichero
Publicado por: ivancea96 en 8 Noviembre 2015, 02:07 am
Eliminar una fila implica sobreescribir todo lo que está desde el primer caracter de la fila a eliminar.

Así que tienes varias opciones. Una, es la que comentas. Otra, es volcar los contenidos del fichero a otro archivo temporal, y reescribir el fichero inicial.
Para evitar copiar datos 2 veces, puedes crear el nuevo arhcivo, eliminar el antiguo, y cambiar el nombre del nuevo. Pero ahí ya tendrás que hacer uso de librerías como boost, API del SO, u otras, para acceder al sistema de archivos (a parte de "system()").


Título: Re: Eliminar una linea concreta de un fichero
Publicado por: mester en 10 Noviembre 2015, 00:13 am
Eliminar una fila implica sobreescribir todo lo que está desde el primer caracter de la fila a eliminar.

Así que tienes varias opciones. Una, es la que comentas. Otra, es volcar los contenidos del fichero a otro archivo temporal, y reescribir el fichero inicial.
Para evitar copiar datos 2 veces, puedes crear el nuevo arhcivo, eliminar el antiguo, y cambiar el nombre del nuevo. Pero ahí ya tendrás que hacer uso de librerías como boost, API del SO, u otras, para acceder al sistema de archivos (a parte de "system()").
Anda, buena solución la de volcar todo en un fichero eliminando la línea que quiero. Con la de veces que he usado el visudo y no se me ha ocurrido eso para mi programa jeje.
Se agadece, otra vez.