Función para borrar líneas en un archivo.

07/04/2008 - 23:44 por Fuy | Informe spam
Hola, ando buscando en el API alguna función para borrar líneas de un
archivo, hagan de cuenta, tengo lo siguiente:

foo.txt

Mensaje1
Mensaje2
Mensaje3
Mensaje4
Mensaje5

quiero borrar las tres primeras líneas para que el archivo foo.txt
quede de la siguiente forma:

Mensaje4
Mensaje5

No se si haya funciones para borrar líneas en un archivo usando C#,
pero hasta ahorita en el API no encuentro nada.

ok

ATTE
Fuy

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
08/04/2008 - 08:28 | Informe spam
"Fuy" wrote in message
news:
Hola, ando buscando en el API alguna función para borrar líneas de un


archivo, hagan de cuenta, tengo lo siguiente:

foo.txt

Mensaje1
Mensaje2
Mensaje3
Mensaje4
Mensaje5

quiero borrar las tres primeras líneas para que el archivo foo.txt
quede de la siguiente forma:

Mensaje4
Mensaje5

No se si haya funciones para borrar líneas en un archivo usando C#,
pero hasta ahorita en el API no encuentro nada.



No, en el API no hay nada. Para modificar como quieres el contenido de
un archivo de texto es necesario reescribir el archivo completo, ya que el
resto de las líneas tienen que "moverse" en el archivo para ocupar el hueco
que dejan las borradas, y "mover" el contenido dentro de un archivo supone
volverlo a escribir. Si no es muy grande, y te cabe en memoria, puedes
leerlo a un array, suprimir las lineas que quieras y volverlo a grabar
encima.
Respuesta Responder a este mensaje
#2 RFOG
10/04/2008 - 20:10 | Informe spam
Este ejercicio es un ejercicio casi clásico para ficheros mapeados en
memoria... cosa que el .NET (si no me equivoco) no puede hacer.

Mapeas el fichero en memoria, empiezas a recorrerlo hasta encontrar el
segundo "", a partir de ahí mueves en bucle byte a byte al principio y
cierras: poco menos que instantáneo si el tamaño del fichero es pequeño, y
si no pasa de un par de gigas en Win32, la forma más rápida de hacerlo,
más que E/S con buffer o sin él.

:-)

En Mon, 07 Apr 2008 23:44:40 +0200, Fuy
escribió:

Hola, ando buscando en el API alguna función para borrar líneas de un
archivo, hagan de cuenta, tengo lo siguiente:

foo.txt

Mensaje1
Mensaje2
Mensaje3
Mensaje4
Mensaje5

quiero borrar las tres primeras líneas para que el archivo foo.txt
quede de la siguiente forma:

Mensaje4
Mensaje5

No se si haya funciones para borrar líneas en un archivo usando C#,
pero hasta ahorita en el API no encuentro nada.

ok

ATTE
Fuy





Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Libros, ciencia ficción y programación
Hay sonrisas que no son de felicidad, sino de un modo de llorar con bondad.
Respuesta Responder a este mensaje
#3 Alberto Poblacion
10/04/2008 - 20:27 | Informe spam
"RFOG" wrote in message news:
Este ejercicio es un ejercicio casi clásico para ficheros mapeados en
memoria... cosa que el .NET (si no me equivoco) no puede hacer.

Mapeas el fichero en memoria, empiezas a recorrerlo hasta encontrar el
segundo "", a partir de ahí mueves en bucle byte a byte al principio y
cierras: poco menos que instantáneo si el tamaño del fichero es pequeño, y
si no pasa de un par de gigas en Win32, la forma más rápida de hacerlo,
más que E/S con buffer o sin él.



En lugar de mover byte a byte, ¿no sería mejor mover int a int (o long a
long si el procesador es de 64 bits)?
Respuesta Responder a este mensaje
#4 RFOG
10/04/2008 - 20:39 | Informe spam
En Thu, 10 Apr 2008 20:27:17 +0200, Alberto Poblacion
escribió:

"RFOG" wrote in message news:
Este ejercicio es un ejercicio casi clásico para ficheros mapeados en
memoria... cosa que el .NET (si no me equivoco) no puede hacer.

Mapeas el fichero en memoria, empiezas a recorrerlo hasta encontrar el
segundo "", a partir de ahí mueves en bucle byte a byte al
principio y cierras: poco menos que instantáneo si el tamaño del
fichero es pequeño, y si no pasa de un par de gigas en Win32, la forma
más rápida de hacerlo, más que E/S con buffer o sin él.



En lugar de mover byte a byte, ¿no sería mejor mover int a int (o
long a long si el procesador es de 64 bits)?




Sí, claro, pero entonces tienes que tener en cuenta la alineación al
comenzar y luego al terminar para evitar salirte del fichero... o crash
seguro. Con un buen compilador de C++, el movimiento del fichero podría
hacerse con una sóla instrucción ensamblador del tipo REPMOV... casi nada.

Además, me ha entrado el gusanillo y le he estado echando un vistazo y
resulta que en C++ el VC tiene hasta punteros basados en punteros, es
decir:

char *puntero;
char *punteroBasado;
char *punteroBasado __based(puntero);

De este modo, punteroBasado está en relación a puntero, y las operaciones
en archivos mapeados se pueden hacer con aritmética de punteros... y
¡guardar esos punteros basados en disco!

char *puntero;
puntero=MapViewOfFile(...);
char *punteroBasado;
char *punteroBasado __based(puntero);

Operar con punteroBasado (una lista enlazada, un árbol compactado en un
solo bloque de memoria, lo que sea) y a la hora de cerrar el fichero
mapeado, todo se guarda en disco y está listo para el próximo uso...
Vamos, serialización a lo bruto.


Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Libros, ciencia ficción y programación
Hay sonrisas que no son de felicidad, sino de un modo de llorar con bondad.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida