Potrzebuję ciągłego odczytu pliku dziennika w celu wykrycia określonych wzorców. Jak to zrobić bez zakłócania operacji na plikach, które musi wykonać operacja zapisywania dziennika?Odczytaj plik w taki sposób, aby uniemożliwić modyfikację innych procesów.
Proces zapisywania dziennika, oprócz zapisywania logów, okresowo przenosi plik do innej lokalizacji (do osiągnięcia określonego rozmiaru).
Po odczytaniu pliku aplikacja do zapisu rejestru nie przesuwa pliku. Grałem z różnymi opcjami FileShare bez rezultatu.
Tutaj jest uproszczoną wersją mojego kodu:
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);
}
}
"aplikacja rejestrująca zapisy w dzienniku nie przenosi pliku" - czy chcesz, aby czytnik był otwarty na przenoszonym pliku? –
Chcę czytać tak długo, jak plik jest dostępny. Nie mam kontroli nad tym, kiedy/jak aplikacja rejestrująca przenosi plik. Idealnie byłoby uzyskać wyjątek, gdy plik zostanie przeniesiony i rozpocząć czytanie nowego pliku dziennika od tego punktu. – akirekadu