potrzebują fragmentu kodu, który odczytałby ostatnie "n linii" pliku dziennika. Wymyśliłem następujący kod z sieci. Jestem trochę nowy w C-sie. Ponieważ plik dziennika może być dość duży, chcę uniknąć narzutu na czytanie całego pliku. Może ktoś sugeruje jakiekolwiek ulepszenie wydajności. I tak naprawdę nie chcę czytać każdego znaku i zmieniać pozycji.Jak odczytać ostatnie "n" wiersze pliku logu
var reader = new StreamReader(filePath, Encoding.ASCII);
reader.BaseStream.Seek(0, SeekOrigin.End);
var count = 0;
while (count <= tailCount)
{
if (reader.BaseStream.Position <= 0) break;
reader.BaseStream.Position--;
int c = reader.Read();
if (reader.BaseStream.Position <= 0) break;
reader.BaseStream.Position--;
if (c == '\n')
{
++count;
}
}
var str = reader.ReadToEnd();
nie można używać StreamReader tak. – SLaks
spójrz na http://stackoverflow.com/questions/1271225/c-reading-a-file-line-by-line. Możesz wtedy użyć rozszerzenia LINQ '.Last()' na IEnumerable, aby uzyskać ostatnie N linii –
@Russ: Nie, nie możesz. LINQ nie może wydajnie dać ci ostatnich _n_ linii. – SLaks