protected override void ReCreateReader() { LogFileStreamReader.Close(); _logFileStream.Close(); if (File.Exists(LogFileName)) { CreateReader(); } }
protected override void ReCreateReader() { LogFileStreamReader.Close(); _logFileStream.Close(); CreateReader(); }
private void ParseMonthlyFile( CharacterMonthlyLogHeuristics heuristicsFileMap, LogFileInfo logFileInfo, List <LogEntry> result, LogFileParser logFileParser) { var heuristics = heuristicsFileMap.GetFullHeuristicsForMonth(logFileInfo); var dayToSearchFrom = GetMinDayToSearchFrom(logSearchParameters.MinDate, logFileInfo.LogFileDate.DateTime); var dayToSearchTo = GetMaxDayToSearchUpTo(logSearchParameters.MaxDate, logFileInfo.LogFileDate.DateTime); List <LogEntry> entries = new List <LogEntry>(); LogFileStreamReader reader = null; try { for (int day = dayToSearchFrom; day <= dayToSearchTo; day++) { var thisDayHeuristics = heuristics.GetForDay(day); if (thisDayHeuristics.LinesLength == 0) { continue; } if (reader == null) { if (heuristics.HasValidFilePositions) { reader = streamReaderFactory.Create( logFileInfo.FullPath, thisDayHeuristics.StartPositionInBytes); } else { reader = streamReaderFactory.CreateWithLineCountFastForward( logFileInfo.FullPath, thisDayHeuristics.TotalLinesSinceBeginFile); } } var thisEntryDate = new DateTime( logFileInfo.LogFileDate.DateTime.Year, logFileInfo.LogFileDate.DateTime.Month, day, 0, 0, 0); int readLinesCount = 0; List <string> allLines = new List <string>(); string currentLine; while ((currentLine = reader.TryReadNextLine()) != null) { allLines.Add(currentLine); readLinesCount++; if (readLinesCount == thisDayHeuristics.LinesLength) { break; } } IList <LogEntry> parsedLines = logFileParser.ParseLinesForDay(allLines, thisEntryDate, logFileInfo); entries.AddRange(parsedLines); cancellationManager.ThrowIfCancelled(); } result.AddRange(entries); } finally { reader?.Dispose(); } }