public byte Execute() { var result = 0; var checker = _checkerCreator.CreateChecker(); checker.CheckerLocation = CheckerLocation; var errorList = _errorFinderCreator.Create(); var remover = _errorRemoverCreator.Create(); var collector = _garbageCollectorCreator.Create(); #region Обновление софта var updateDirector = new UpdateDirector(new UpdateFtpServerBuilder()); _updateServer = updateDirector.BuildServer(); var miscFiles = new[] { $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\misc\chknewarv.exe", $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\misc\podr.gz" }; _subject.SetUpMessage(@"\yПоиск обновлений на ftp://10.7.97.20/software/registr"); foreach (var file in miscFiles) { var checkReslut = _updateServer.CheckFileState(file); if (checkReslut <= File.GetLastWriteTime(file)) { continue; } _subject.SetUpMessage($@"\yНайдено обновление файла {Path.GetFileName(file)} от {checkReslut}"); _updateServer.UpdateFile(file); } #endregion //2. Дополнили файл, если есть, чем дополнять var appender = _fileAppenderCreator.Create(); //3. Обрабатываем файлы _listReturner = new ListReturner(); _doIteration = true; while (_doIteration) { //Получаем список файлов var fileList = _listReturner.GetFileList(FilePath, Mask); //Для каждого файла из списка запускем чеккер. В результате появятся либо архивы, либо останутся исходные файлы и //появятся новые файлы с расширением .txt foreach (var file in fileList) { var retMessage = appender.AppendFile(file, Additive); var fileName = Path.GetFileName(file); if (retMessage != null) { _subject.SetUpMessage($@"\bК файлу {fileName} {retMessage}"); } _subject.SetUpMessage($@"\bЗапускаю проверку файла {fileName} программой chkNewArv.exe..."); checker.StartChecking(file); } //Получаем список файлов с ошибками и для каждого из файлов в списке производим удаление ошибок var errors = errorList.FindErrors(FilePath); var err = errors as string[] ?? errors.ToArray(); if (err.Length != 0) { _subject.SetUpMessage(@"\wОбнаружены следующие отчёты об ошибках:"); var i = 0; foreach (var file in err) { _subject.SetUpMessage($@"\w{++i}) {Path.GetFileName(file)}"); } remover.RemoveErrors(err, FilePath); } else { _doIteration = false; } collector.MoveTo = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\dispose"; collector.CleanUp(FilePath, "*.txt"); collector.CleanUp(FilePath, "*.old"); collector.MoveTo = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\err"; collector.CleanUp(FilePath, "*.err"); } var archList = _archiveFinderCreator.Create(); var archives = archList.FindArchives(FilePath); var arch = archives as string[] ?? archives.ToArray(); if (arch.Length != 0) { _subject.SetUpMessage(@"\mОбнаружены следующие архивы:"); var i = 0; foreach (var file in arch) { _subject.SetUpMessage($@"\m{++i}) {Path.GetFileName(file)}"); } _ftpFileDistributor = _ftpFileDistributorCreator.Create(); var uploadResult = _ftpFileDistributor.DistributeFiles(arch); MoveToArchive(arch); //todo uploadResult вывести в протокол выполнения и на экран } return((byte)result); }