2010-09-14 32 views
27

Tengo un pequeño problema. Tengo una herramienta que debe analizar diariamente un archivo de registro. Desafortunadamente, este archivo de registro está siendo utilizado por el proceso que escribe en el registro y no puedo detenerlo.¿Cómo se lee un archivo que está en uso?

primer intento fue crear una copia del archivo, lo que no está funcionando bien.

¿Hay alguna manera para mí para leer el texto actual del archivo de registro, incluso si ya está en uso?

+1

¿Cómo ha intentado leerlo? – jgauffin

+1

Depende de cómo la herramienta abre el archivo de registro. Si es agradable y usa FILE_SHARE_READ, puede abrir el archivo de registro para leerlo como sugieren otros carteles; de lo contrario, mala suerte para ti. –

Respuesta

63
using (FileStream stream = File.Open("path to file", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     while (!reader.EndOfStream) 
     { 

     } 
    } 
} 

FileAccess especifica qué USTED desea hacer con el archivo. FileShare especifica lo que OTHERS puede hacer con el archivo mientras lo tiene en uso.

En el ejemplo anterior, se puede abrir un archivo para lectura, mientras que otros procesos pueden tener el archivo abierto para acceso de lectura/escritura. En la mayoría de los casos, esto funcionará para abrir archivos de registro que están en uso.

+2

+1, la única respuesta correcta aquí. Especificar FileShare.ReadWrite es crucial. El otro proceso ya obtuvo acceso de escritura, no puede negarlo. –

+0

¡Gracias, funcionó perfectamente! – Feroc

+0

File.OpenRead hace esto dentro. –

-2

recomiendo altamente BareTail, que utilizamos para mirar a todos nuestros registros en tiempo real. También admite resaltar, lo cual es muy útil.

+0

hmmm ... parece que OP quiere una forma programática para leer el archivo cuando ya está abierto. = P – Dave

3

Uso File.OpenRead(path), esto le permite acceder a una corriente de sólo lectura al archivo; de esa forma no se molestará si otra aplicación tiene un bloqueo de escritura en el archivo.

+1

No siempre es cierto, estoy teniendo problemas para leer un archivo de registro bloqueado y estoy usando File.OpenRead –

+0

File.OpenRead no abrirá el archivo cuando otra aplicación ya lo haya abierto para escribir. La respuesta de Tom Vervoort es la correcta. – Wout

1

depende, ¿ha intentado leer el archivo solo en lectura? utilizando uno de los métodos estáticos

System.IO.File.ReadAllText(path) or System.IO.File.ReadAllLines(path) 

pueden trabajar si el archivo no está bloqueado exclusivamente

3

Usted está a merced del programa que está escribiendo el archivo. En Windows, un proceso puede abrir un archivo para leer, escribir o ambos, pero también puede controlar si otros procesos pueden abrir el archivo para lectura, escritura o ambos. Si el otro proceso le ha negado el derecho de leer el contenido del archivo, entonces no hay nada que pueda hacer al respecto.

Si controla el código fuente del programa que está escribiendo el archivo de registro, y luego cambiarlo para permitir el acceso de lectura por otros procesos.

Cuestiones relacionadas