Example #1
0
        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();
        }
Example #2
0
    /// <summary>
    ///Чтение элементов ТЖ в количестве count с возможностью чтения только измененных файлов
    ///Возвращает true если есть данные для чтения
    /// </summary>
    /// <param name="path">путь к папке с ТЖ</param>
    /// <param name="TJList">возвращает список элементов ТЖ</param>
    /// <param name="count">количество элементов для чтения</param>
    /// <param name="coord">координаты места начала|окончания чтения</param>
    /// <param name="coordFin">координаты места окончания чтения текста</param>
    public static bool ReadTJ(string path, ref List <TJobject> TJList, int count, ref TJCoord coord, ref TJCoordFin coordFin)
    {
        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;
            long   offsetfin = 0;

            //Ищем конец файла при чтении с изменениями
            if (coordFin.filenames != null)
            {
                for (int i = 0; i < coordFin.filenames.Count; i++)
                {
                    if (coordFin.filenames[i] == f)
                    {
                        offsetfin = coordFin.offsets[i];
                        break;
                    }
                }
            }

            //смещение при чтении файла, местоположение в файле после чтения блока
            if ((coord.filename == f) || (coord.filename == ""))
            {
                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 = offsetfin + 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--;
                }

                //окончание файла. есть возможность, что len == buflen и при этом наступил конец файла
                if (len != buflen)
                {
                    int indexFile = 0;
                    indexFile = coordFin.filenames.IndexOf(f);
                    if (indexFile == -1)
                    {
                        coordFin.filenames.Add(f);
                        coordFin.offsets.Add(objReader.BaseStream.Position);
                    }
                    else
                    {
                        coordFin.offsets[indexFile] = objReader.BaseStream.Position;
                    }
                    break;
                }
            }
            coord.offset = 0;
            objReader.Close();
        }

        coord.filename = "";
        coord.offset   = 0;
        return(false);
    }