/*========================================================*/ public static FstFile ParseServerFile ( IrbisConnection client, string fileName ) { FstFile result = new FstFile(); FileSpecification specification = new FileSpecification ( IrbisPath.MasterFile, fileName ); string content = client.ReadTextFile(specification); content = content.Replace("\r", string.Empty); foreach (string textLine in content.Split ( new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries )) { FstLine fstLine = FstLine.ParseLine(textLine); if (fstLine != null) { result.Lines.Add(fstLine); } } return(result); }
/*========================================================*/ public static FstFile ParseLocalFile ( string fileName ) { FstFile result = new FstFile(); using (StreamReader reader = new StreamReader ( fileName, Encoding.Default )) { string textLine; while ((textLine = reader.ReadLine()) != null) { FstLine fstLine = FstLine.ParseLine(textLine); if (fstLine != null) { result.Lines.Add(fstLine); } } } return(result); }
static void Main() { try { StartTime = DateTime.Now; // Устанавливаем обработчик прерывания Console.CancelKeyPress += Console_CancelKeyPress; ReadConfiguration(); using (Log = new StreamWriter(LogFileName, true, Encoding.Default)) { int mfnBefore, mfnAfter; WriteLogLine(new string('=', 70)); WriteLogLine("Импорт начат: {0}", StartTime); WriteLogLine(string.Empty); string[] inputFiles = DiscoverFiles(); WriteLogLine("Найдено файлов: {0}", inputFiles.Length); if (inputFiles.Length == 0) { WriteLogLine("Нет импортируемых файлов, завершаемся"); return; } Array.Sort(inputFiles); using (Client = new IrbisConnection()) { //using (Buffer = new RecordBuffer(Client, 100)) { //Buffer.Actualize = true; //Buffer.Database = Client.Database; //Buffer.BatchWrite += Buffer_BatchWrite; Client.ParseConnectionString(ConnectionString); WriteLog("Подключение к серверу... "); Client.Connect(); WriteLogLine("успешно"); Fst = FstFile.ParseServerFile ( Client, FstFileName ); WriteLogLine("Файл FST содержит {0} строк", Fst.Lines.Count); if (Fst.Lines.Count == 0) { WriteLogLine("Плохой файл FST, завершаемся"); return; } Magazines = LoadMagazines(); WriteLogLine ( "Сводных описаний импортируемых журналов в каталоге: {0}", Magazines.Count ); if (Magazines.Count == 0) { WriteLogLine("Нет импортируемых журналов в каталоге"); return; } mfnBefore = Client.GetMaxMfn(); using (Queue = new QueueEngine <RecordTask> ( Environment.ProcessorCount, QueueLength )) { //Queue.Waiting += Queue_Waiting; int index = 0; foreach (string inputFile in inputFiles) { if (GoOn) { ProcessFile ( ++index, inputFile ); if (GoOn && DeleteProcessedFiles) { WriteLog("Удаляем файл... "); File.Delete(inputFile); WriteLogLine("удален"); } } // if } // foreach WriteLogLine("Длина очереди: {0}", Queue.QueueLength); WriteLog("Ожидаем завершения обработки записей в очереди: "); } // using Queue if (!GoOn) { WriteLogLine("Импорт прерван пользователем"); } WriteLogLine("Отправка на сервер оставшихся записей"); } // using Buffer mfnAfter = Client.GetMaxMfn(); } // using Client WriteLogLine("Произведено корректное отключение от сервера"); TimeSpan elapsedTime = DateTime.Now - StartTime; WriteLogLine ( "Затрачено времени: {0}", elapsedTime ); WriteLogLine ( "Импортировано файлов: {0}, записей: {1}", FileCount, RecordCount ); WriteLogLine ( "MFN до={0}, после={1}", mfnBefore, mfnAfter ); } } catch (Exception exception) { Log = null; WriteLogLine ( "ВОЗНИКЛА ОШИБКА: {0}", exception ); WriteLogLine("Аварийное завершение"); } }