Example #1
0
        /// <summary>
        /// Создает экземпляр класса
        /// </summary>
        /// <param name="logFile">Имя исходного лог-файла</param>
        public Index(String logFile)
        {
            if (String.IsNullOrEmpty(logFile))
                throw new ArgumentNullException("logFile");

            _recordCount = -1;
            _logSize = -1;

            // блокируем совместный доступ к индексу
            _syncIndexMutex = MutexHelper.CreateSyncIndexMutex(logFile);
            _syncIndexMutex.WaitMutex();

            // формируем имя индексного файла
            var indexName = String.Format("{0}.index", logFile);
            // проверяем индекс
            var validationResult = ValidateIndex(logFile, indexName);
            if (validationResult.State != IndexState.Valid)
                // выполняем переиндексацию
                ReIndex(validationResult, logFile, indexName);

            // открываем индекс
            _stream = OpenForReading(indexName);
            _reader = new BinaryReader(_stream, Encoding.Default);
        }