2010-04-17 18 views
5

Tengo un servicio que se ejecuta todo el tiempo y también conserva un archivo de registro. Básicamente agrega nuevas líneas al archivo de registro cada pocos segundos. Escribí un pequeño archivo que lee estas líneas y luego las analiza en varias acciones. La pregunta que tengo es ¿cómo puedo eliminar las líneas que ya he analizado del archivo de registro sin interrumpir la escritura del archivo de registro por parte del servicio?C Eliminar la primera línea de un archivo de texto sin reescribir el archivo

Normalmente, cuando necesito eliminar una línea en un archivo, abro la original y la temporal y luego solo escribo todas las líneas en el archivo temporal excepto el original que quiero eliminar. Obviamente, este método no tendrá palabras aquí.

Entonces, ¿cómo hago para borrarlos?

+0

Dupe of http://stackoverflow.com/questions/1151713/delete-a-line-from-a-file-in-c-language entre otros –

Respuesta

0

No estoy seguro, pero estoy pensando de esta manera: New Line es un char, por lo que debe eliminar caracteres para esa línea + New Line char Por cierto, "mover" todos los caracteres hacia atrás (sobrescribir la línea anterior), es como copiar cada carácter en una posición diferente y eliminarlos de su posición anterior

Así que no, no creo que pueda eliminar una línea, debe volver a escribir todo el archivo.

5

En los sistemas de archivos más utilizados no puede eliminar una línea del principio de un archivo sin volver a escribir todo el archivo. Sugiero en lugar de un archivo grande, usar muchos archivos pequeños y rotarlos, por ejemplo, una vez al día. Los archivos antiguos se eliminan cuando ya no los necesita.

2

Desafortunadamente, no se puede hacer sin volver a escribir el archivo, ya sea en el lugar o como un archivo separado.

Una cosa que puede desea ver es mantener un puntero en otro archivo, especificando la posición de la primera línea no procesada.

Luego su proceso simplemente abre el archivo y busca esa ubicación, procesa algunas líneas y luego actualiza el puntero.

Aún necesitará pasar los archivos en algún momento para que no sigan creciendo para siempre.

0

No se puede, simplemente no es así como funcionan los archivos.

Suena como que necesita algún tipo de servicio de mensajes de registro/biblioteca que su programa podría conectar con el fin de registrar los mensajes, lo que podría ocultar los detalles subyacentes de la apertura de archivos/cierre etc.

0

Si cada registro line tiene un identificador único (o incluso solo el número de línea), simplemente puede almacenar en su registro el identificador hasta que lo haya analizado. De esta forma, no tiene que cambiar nada en el archivo de registro.

Si el archivo de registro comienza a ser demasiado grande, puede cambiar a uno nuevo cada día (por ejemplo).

Cuestiones relacionadas