static void GetApplicationsSources(DateTime yearMonthDay) { const string applicationsFolder = "applications"; const string uncPath = @"\\novato\applications\Backup"; // assume applications sources are at drive F: foreach (string filePath in GetFiles(uncPath, yearMonthDay)) { if (!filePath.EndsWith("7z")) { continue; } ArchivePart part = new ArchivePart(uncPath, applicationsFolder); part._files = new List <string> { filePath }; Archive archive = new Archive(new List <ArchivePart> { part }, false); string archiveName = "Company_" + filePath.Substring(filePath.LastIndexOf(@"\") + 1); s_applicationsArchives[archiveName] = archive; } }
static void GetApplicationsSources(DateTime yearMonthDay) { string applicationsDrive = @"F:\"; string applicationsFolder = "applications"; // assume applications sources are at drive F: foreach (string filePath in GetFiles(applicationsDrive, yearMonthDay)) { if (!filePath.StartsWith(Path.Combine(applicationsDrive, applicationsFolder)) || !filePath.EndsWith(".tar.bz2")) { continue; } ArchivePart part = new ArchivePart(applicationsFolder, applicationsDrive); part._files = new List <string> { filePath }; Archive archive = new Archive(new List <ArchivePart> { part }); string archiveName = "Company_" + filePath.Substring(applicationsDrive.Length) + ".7z"; s_applicationsArchives[archiveName] = archive; } }
protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs) { if (eventArgs.Path.Matches("systemID", "arkivdel")) _currentArchivePart = new ArchivePart {SystemId = eventArgs.Value}; if (eventArgs.Path.Matches("arkivdelstatus", "arkivdel")) _currentArchivePart.Status = eventArgs.Value; }
protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs) { if (eventArgs.Path.Matches("systemID", "arkivdel")) { _currentArchivePart = new ArchivePart { SystemId = eventArgs.Value }; _archiveParts.Add(_currentArchivePart); } }
private int CountTotalNumberOfPrecedents(ArchivePart currentArchivePart) { int totalNumberOfPrecedentsResult = new int[] { currentArchivePart.NumberOfPrecedentsInCasefolders, currentArchivePart.NumberOfPrecedentsInJournalposts }.Sum(); return(totalNumberOfPrecedentsResult); }
private int CountTotalNumberOfCrossReferences(ArchivePart currentArchivePart) { int totalNumberOfCrossReferencesResult = new[] { currentArchivePart.ClassReferenceCount, currentArchivePart.BasicRegistrationReferenceCount, currentArchivePart.FolderReferenceCount }.Sum(); return(totalNumberOfCrossReferencesResult); }
protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs) { if (eventArgs.Path.Matches("systemID", "arkivdel")) { _currentArchivePart = new ArchivePart { SystemId = eventArgs.Value }; _archiveParts.Add(_currentArchivePart); } if (eventArgs.Path.Matches("opprettetDato", "registrering")) { int year = DateTime.Parse(eventArgs.Value).Year; if (_currentArchivePart.RegistrationsByYear.ContainsKey(year)) { _currentArchivePart.RegistrationsByYear[year]++; } else { _currentArchivePart.RegistrationsByYear.Add(year, 1); } } }
protected override void ReadElementValueEvent(object sender, ReadElementEventArgs eventArgs) { if (eventArgs.Path.Matches("systemID", "arkivdel")) { _currentArchivePart = new ArchivePart { SystemId = eventArgs.Value }; _archiveParts.Add(_currentArchivePart); } if (!eventArgs.Path.Matches("opprettetDato", "registrering")) { return; } if (Noark5TestHelper.TryParseArchiveDate(eventArgs.Value, out DateTime registrationCreatedTime)) { _currentArchivePart.RegistrationCreationDates.Add(registrationCreatedTime); } else { _invalidRegistrationCreationDateCount++; } }
public override bool ReadPart(FilePart part) { // одна часть архива - она полностью пойдет на декомпрессию var archivePart = new ArchivePart(); ArhivePortion arhivePortion = null; while (archivePart != null) { if (_portionFromPrev != null) { // используем порцию оставщуюся с предыдущей части arhivePortion = _portionFromPrev; _portionFromPrev = null; } else { // читаем порцию из файла var buffer = new byte[BufferSize]; var count = SourceStream.Read(buffer, 0, buffer.Length); if (count > 0) { _totalReadByte = _totalReadByte + count; if (arhivePortion == null) { arhivePortion = new ArhivePortion(new BytesBuffer(buffer, 0, count - 1)); } else { // предыдущая порция закончилась на части заголовка arhivePortion.Append(new BytesBuffer(buffer, 0, count - 1)); } } else { // всё в part part.Source = archivePart.ToArray(); part.IsLast = true; Logger.Add($"Поток {Thread.CurrentThread.Name} прочитал последнюю часть файла {part} "); return(true); } } // нашли заголовок if (arhivePortion.IsExistsTitle) { // нашли заголовок полностью if (arhivePortion.IsExistsAllTitle) { // заголовок в начале if (arhivePortion.StartsWithTitle) { // часть архива пустая - нашли заголовок для текущей части if (archivePart.IsEmpty) { // записываем в часть все что до следующего заголовка archivePart.AppendTitleAndDataBeforeNextTitle(arhivePortion); if (arhivePortion.IsNotEmpty) { // если остаток порции не пустой, то возможно начался новый заголовок // в остатке есть заголовок полностью if (arhivePortion.IsExistsAllTitle) { // всё в part part.Source = archivePart.ToArray(); // а остаток нужно "припасти" для следующей part _portionFromPrev = arhivePortion; return(true); } // в остатке есть заголовок, но не полностью // !!! окончить текущую часть не имеем права - не удостоверившись, что это заголовок // поэтому здесь ничего не делаем // ... и далее на чтение следующей порции } else { arhivePortion = null; // ... и дальше на чтение следующей порции } } else { // нашли заголовок для следующей части - значит текущая часть сформирована, а все что осталось в порции уже для следующей части // порцию нужно "припасти" для следующей part _portionFromPrev = arhivePortion; // всё в part part.Source = archivePart.ToArray(); return(true); } } else { // заголовок не в начале порции if (archivePart.IsEmpty) { throw new FormatException( $"part {part}. archivePart ещё пустая, а в порции заголовок не в начале - неверный формат архива"); } // добавляем в часть всё что до заголовка archivePart.AppendDataBeforeTitle(arhivePortion); // всё в part part.Source = archivePart.ToArray(); // порцию нужно "припасти" для следующей part _portionFromPrev = arhivePortion; return(true); } } else { // нашли заголовок не полностью // !!! окончить текущую часть не имеем права - не удостоверившись, что это заголовок // поэтому здесь ничего не делаем // ... и далее на чтение следующей порции } } else { // заголовок не нашли в порции if (archivePart.IsEmpty) { throw new FormatException("Часть ещё пустая, а в порции нет заголовка - неверный формат архива"); } // всю прочитанную порцию архива в часть archivePart.AppendAllPortion(arhivePortion); Debug.Assert(arhivePortion.IsEmpty, "Всё извлекли из порции, а она всё равно не пустая"); arhivePortion = null; // ... и далее на чтение следующей порции } } throw new Exception("Обнаружена неправильная работа ArсhivePartReader"); }