static void DebugCountReadWithChange(string path) { DateTime localDate = DateTime.Now; TJList = new List <TJobject>(); coord = new TJCoord(); coordFin = new TJCoordFin(); pathTimer = path; aTimer = new Timer(5000); aTimer.Elapsed += OnTimedEvent; aTimer.AutoReset = true; aTimer.Enabled = true; DateTime localDateEnd = DateTime.Now; Console.WriteLine(localDateEnd - localDate); Console.ReadKey(); }
static void DebugCountRead(string path) { DateTime localDate = DateTime.Now; List <TJobject> TJList = new List <TJobject>(); int count = 0; TJCoord coord = new TJCoord(); while (TJ.ReadTJ(path, ref TJList, 1000, ref coord)) { count = TJList.Count + count; TJList.Clear(); Console.WriteLine(coord.filename); } count = TJList.Count + count; DateTime localDateEnd = DateTime.Now; Console.WriteLine("Count = " + count); Console.WriteLine(localDateEnd - localDate); Console.ReadKey(); }
/// <summary> ///Чтение элементов ТЖ в количестве count /// </summary> /// <param name="path">путь к папке с ТЖ</param> /// <param name="TJList">возвращает список элементов ТЖ</param> /// <param name="count">количество элементов для чтения</param> /// <param name="coord">координаты места начала|окончания чтения</param> public static bool ReadTJ(string path, ref List <TJobject> TJList, int count, ref TJCoord coord) { bool pass = true; if (coord.filename == "") { pass = false; } List <string> files = new List <string>(Directory.EnumerateFiles(path, "*.log", SearchOption.AllDirectories)); foreach (var f in files) { int len = 0; string rollstr = ""; long offset = 0; //смещение при чтении файла, местоположение в файле после чтения блока if (coord.filename == f) { pass = false; } if (pass) { continue; } char[] buffer = new char[buflen]; byte[] bufferbyte = new byte[buflen]; BinaryReader objReader = new BinaryReader(File.Open(f, FileMode.Open)); objReader.BaseStream.Position = coord.offset; while (true) { bufferbyte = objReader.ReadBytes(buflen); len = bufferbyte.Length; offset = offset + len; //Разобьем на строки начинаем со второй string bufstr = ArrByteToArrString(bufferbyte); string pattern = "(.)([0-9][0-9]:[0-9][0-9]\\.([0-9]{4}|[0-9]{6})-[0-9]+,)"; bufstr = Regex.Replace(bufstr, pattern, "$1" + '\n' + "$2"); string[] strTJ = bufstr.Split('\n'); int lastcount = strTJ.Length; if (lastcount == 0) { break; } //Соединяем последнюю строку из прошлого чтения и первую этого int index = FirstAndLastString(ref strTJ, ref rollstr, ref TJList, f); for (int i = index; i < lastcount; i++) { //Количество возвращаемых элементов достигло count if (count == 0) { coord.filename = f; //Ищем следующий элемент strTJ[i] в tmpstr string findstr = strTJ[i].Remove(13); if (offset < buflen) { coord.offset = FindStrInArrByte(findstr, bufferbyte) + coord.offset; } else { coord.offset = offset - len + FindStrInArrByte(findstr, bufferbyte) + coord.offset; } objReader.Close(); return(true); } if ((i == lastcount - 1) & (len == buflen)) { rollstr = strTJ[i]; } else { TJList.Add(ParseStringTJ(strTJ[i], f)); } count--; } if (len != buflen) { break; } } coord.offset = 0; objReader.Close(); } coord.filename = ""; coord.offset = 0; return(false); }