示例#1
0
文件: Appl.cs 项目: stovpyak/gzip
        private void Compress(ICompressStrategy strategy, IFileNameProvider sourceFileNameProvider, IFileNameProvider targetFileNameProvider)
        {
            _wasException = null;
            var sourceFileName = sourceFileNameProvider.GetFileName();

            if (!File.Exists(sourceFileName))
            {
                throw new FileNotFoundException($"Не найден файл {sourceFileName}");
            }

            // создание очередей
            var loggerForQueue = new LoggerDummy();
            var queueForRead   = new PartQueue("ForRead", loggerForQueue);

            _queues.Add(queueForRead);
            var queueForCompress = new PartQueue("ForCompress", loggerForQueue);

            _queues.Add(queueForCompress);
            var queueForWrite = new IndexedParts("ForWrite", loggerForQueue);

            _queues.Add(queueForWrite);

            _stopEvent = new ManualResetEventSlim(false);
            // создание обработчиков очередей
            var writer = new Writer(_logger, _systemInfoProvider, ApplExceptionHandler, targetFileNameProvider, _stopEvent, queueForWrite, queueForRead);

            _queueHandlers.Add(writer);

            var archiversRuner = new CompressRuner(_logger, _systemInfoProvider, ApplExceptionHandler, queueForCompress, queueForWrite);

            _queueHandlers.Add(archiversRuner);

            var partReader = new FilePartReader(_logger, strategy);
            var reader     = new Reader(_logger, _systemInfoProvider, ApplExceptionHandler, sourceFileNameProvider, partReader, queueForRead, queueForCompress);

            _queueHandlers.Add(reader);

            // вывод отладочной информации
            var sourceFileInfo = new FileInfo(sourceFileName);

            _logger.Add($"Размер файла {sourceFileInfo.Length} byte");
            AddSystemInfo();
            var maxActivePartCount = strategy.MaxActivePartCount;

            _logger.Add($"Максимальное кол-во одновременно обрабатываемых частей {maxActivePartCount} шт.");
            _logger.Add($"Размер одной части {strategy.PartSize} byte");
            _logger.Add("Работа начата...");

            _stopWatch.Reset();
            _stopWatch.Start();

            for (var i = 0; i < maxActivePartCount; i++)
            {
                var part = new FilePart($"FilePart{i + 1}");
                queueForRead.Add(part);
            }

            StopEventWait();
        }
示例#2
0
文件: Appl.cs 项目: stovpyak/gzip
        private void Decompress(IDecompressStrategy strategy, IFileNameProvider sourceFileNameProvider, IFileNameProvider targetFileNameProvider)
        {
            // нужно читать из файла части заархивированные
            // они начинаются с 10 байт (31,139,8,0,0,0,0,0,4,0)
            // эти части по отдельности отдавать на декомпрессию

            _wasException = null;
            var sourceFileName = sourceFileNameProvider.GetFileName();

            if (!File.Exists(sourceFileName))
            {
                throw new FileNotFoundException($"Не найден файл {sourceFileName}");
            }

            // создание очередей
            var loggerForQueue = new LoggerDummy();
            var queueForRead   = new PartQueue("ForRead", loggerForQueue);

            _queues.Add(queueForRead);
            var queueForDecompress = new PartQueue("ForDecompress", loggerForQueue);

            _queues.Add(queueForDecompress);
            var queueForWrite = new IndexedParts("ForWrite", loggerForQueue);

            _queues.Add(queueForWrite);

            _stopEvent = new ManualResetEventSlim(false);
            // создание обработчиков очередей
            var writer = new Writer(_logger, _systemInfoProvider, ApplExceptionHandler, targetFileNameProvider, _stopEvent, queueForWrite, queueForRead);

            _queueHandlers.Add(writer);

            var decompressRuner = new DecompressRuner(_logger, _systemInfoProvider, ApplExceptionHandler, queueForDecompress, queueForWrite);

            _queueHandlers.Add(decompressRuner);

            var partReader = new ArсhivePartReader(_logger);
            var reader     = new Reader(_logger, _systemInfoProvider, ApplExceptionHandler, sourceFileNameProvider, partReader, queueForRead, queueForDecompress);

            _queueHandlers.Add(reader);

            var sourceFileInfo = new FileInfo(sourceFileName);

            _logger.Add($"Размер файла {sourceFileInfo.Length} byte");
            AddSystemInfo();
            _logger.Add("Работа начата...");

            _stopWatch.Reset();
            _stopWatch.Start();

            for (var i = 0; i < strategy.MaxActivePartCount; i++)
            {
                var part = new FilePart($"FilePart{i + 1}");
                queueForRead.Add(part);
            }

            StopEventWait();
        }
示例#3
0
        private void TestCompressDecompressCheck(string sourceFileName,
                                                 string compressedFileName, string decompressedNewFileName)
        {
            // prepare
            if (File.Exists(compressedFileName))
            {
                File.Delete(compressedFileName);
            }
            Assert.IsFalse(File.Exists(compressedFileName), "Не удалось удалить архив перед началом теста");

            if (File.Exists(decompressedNewFileName))
            {
                File.Delete(decompressedNewFileName);
            }
            Assert.IsFalse(File.Exists(decompressedNewFileName),
                           "Не удалось удалить разархивированный файл перед началом теста");

            // init
            var logger = new LoggerDummy();
            var appl   = new Appl(logger, new SystemInfoProvider());

            var source  = new FileNameProviderStub(sourceFileName);
            var archive = new FileNameProviderStub(compressedFileName);

            var systemInfoProvider = new SystemInfoProvider();
            var strategy           = new SmartCompressStrategy(systemInfoProvider);

            appl.ExecuteCompress(strategy, source, archive);
            Assert.IsTrue(File.Exists(compressedFileName), "Файл архива не обнаружен после архивации");

            var decompress         = new FileNameProviderStub(decompressedNewFileName);
            var decompressStrategy = new DecompressStrategyStub(1);

            appl.ExecuteDecompress(decompressStrategy, archive, decompress);
            Assert.IsTrue(File.Exists(compressedFileName), "Файл разархивированный не обнаружен после разархивации");

            IsFilesEquals(sourceFileName, decompressedNewFileName);
        }
示例#4
0
        public void TestInitialize()
        {
            var logger = new LoggerDummy();

            _parser = new ArgsParser(logger);
        }