예제 #1
0
        public int Run(string[] args)
        {
            ShowInfo();
            var(compressionMode, sourceFilePath, destinationFilePath) = GetValidatedParams(args);
            var sourceFile      = new FileInfo(sourceFilePath);
            var destinationFile = new FileInfo(destinationFilePath);

            _progressBar = new ProgressBarAdapter();
            if (compressionMode == "compress")
            {
                var compressor = new ChunkedGZipCompressor();
                _threadManager = new ThreadManager(sourceFile, MaxBytesChunk, compressor, destinationFile);
                _progressBar.SetStatus("Compressing...");
            }
            else
            {
                var decompressor = new ChunkedGZipDecompressor();
                _threadManager = new ThreadManager(sourceFile, decompressor, destinationFile);
                _progressBar.SetStatus("Decompressing...");
            }
            _threadManager.UpdateInfoText         += msg => WriteConsoleWithTag(msg);
            _threadManager.PercentProgressChanged += _progressBar.SetProgress;
            Console.CancelKeyPress += (s, e) =>
            {
                if (e.SpecialKey == ConsoleSpecialKey.ControlC)
                {
                    _progressBar?.SetStatus("Cancelling...");
                    e.Cancel = true;
                    _threadManager?.Cancel();
                }
            };
            return(_threadManager.Run());
        }
예제 #2
0
 public ThreadManager(FileInfo source, ChunkedGZipDecompressor chunkedHandler, FileInfo destination)
 {
     _reader = new ChunkedFileReader(source, _token.Token);
     InitializeModules(chunkedHandler, destination);
 }