2011-08-10 12 views
7

Necesito leer continuamente un archivo de registro para detectar ciertos patrones. ¿Cómo puede hacerlo sin interferir con las operaciones de archivos que la operación de grabación de registro necesita realizar?Lea un archivo de tal forma que no se impida que otros procesos lo modifiquen

El proceso de grabación de registro, además de escribir registros, mueve periódicamente el archivo a otra ubicación (una alcanza cierto tamaño).

Con la forma en que leo el archivo, la aplicación de grabación de registro no puede mover el archivo. Jugué con varias opciones de FileShare en vano.

aquí está simplificado versión de mi código:

using (FileStream stream = new FileStream(@"C:\temp\in.txt", FileMode.Open, FileAccess.Read, FileShare.Delete)) 
     { 
      TextReader tr = new StreamReader(stream); 
      while (true) 
      { 

       Console.WriteLine(".. " + tr.ReadLine()); 
       Thread.Sleep(1000); 
      } 

     } 
+0

"la aplicación de grabación de registro no puede mover el archivo": ¿desea mantener abierto un lector en un archivo que se está moviendo? –

+0

Quiero seguir leyendo mientras el archivo esté disponible. No tengo control sobre cuándo/cómo la aplicación de registro mueve el archivo. Idealmente, obtendría una excepción cuando el archivo se moviera y comencé a leer el nuevo archivo de registro desde ese momento. – akirekadu

Respuesta

3

Probar FileShare.ReadWrite | FileShare.Delete.

Pero si el archivo se elimina (movido), entonces creo que su lectura fallará.

+0

Gracias. Esto es exactamente lo que estaba buscando. – akirekadu

3

desea mantener el archivo abierto todo el tiempo, no sólo cuando hay cambios para leer.

Creo que un mejor enfoque sería usar un FileSystemWatcher para monitorear el archivo de cambios y luego abrir el archivo cuando se modifique y leer los datos nuevos. Si el archivo solo se adjunta, puede realizar un seguimiento de cuánto tiempo ha procesado el archivo y buscar inmediatamente esa posición cuando haya abierto el archivo.

+0

Si este es un archivo de registro moderado (o muy usado) (que sospecho que podría ser), esto se disparará constantemente. Digamos que este archivo se está escribiendo en 1000 líneas/segundo ... – Joe

+0

@anders Luego tiene el mismo problema que quizás un escritor quiera mover ese archivo cuando un lector lea. – Skomski

+0

Como mencionó Joe, al tratarse de un archivo de registro, se actualiza constantemente. – akirekadu

Cuestiones relacionadas