예제 #1
0
        static void Main(string[] args)
        {
            Console.CancelKeyPress += (sender, ceArgs) =>
            {
                StatusManager.ProcessIsCanceled = true;
                ConsoleLogger.WriteDiagnosticInfo(PROCESS_CANCELLED);
                Environment.Exit(FAILURE_EXIT_CODE);
            };

            try
            {
                Validation.CheckInputParameters(args);
                var inputFile = new FileInfo(args[1]);

                var threadManager = new ThreadManager();

                FileReader        fileReader    = null;
                FileWriter        fileWriter    = null;
                Archiever         archiever     = null;
                OperationType     operationType = OperationType.Compress;
                GZipBlockArchiver compressor    = new GZipBlockArchiver(args[1], args[2], threadManager, inputFile.Length);

                if (args[0] == Dictionary.COMPRESS_COMMAND)
                {
                    fileReader = new UncompressedFileReader(args[1], compressor.CompressedDataManagers);
                    fileWriter = new CompressedFileWriter(args[2], compressor.DictionaryWritingManager);
                    archiever  = new Compressor(compressor.CompressedDataManagers, compressor.DictionaryWritingManager);
                }
                else
                {
                    fileReader    = new CompressedFileReader(args[1], compressor.CompressedDataManagers);
                    fileWriter    = new DecompressedFileWriter(args[2], compressor.DictionaryWritingManager);
                    archiever     = new Decompressor(compressor.CompressedDataManagers, compressor.DictionaryWritingManager);
                    operationType = OperationType.Decompress;
                }

                var processResult = compressor.Start(fileReader, archiever, fileWriter, operationType);

                Console.CursorTop += 1;
                if (processResult && !StatusManager.ProcessIsCanceled)
                {
                    ConsoleLogger.WriteSuccessInfo($"{args[2]} : {SUCCESS_CREATED}");
                }
                else
                {
                    ConsoleLogger.WriteError($"{args[2]}: {FAILURE_CREATED}");
                }
            }
            catch (Exception ex)
            {
                ConsoleLogger.WriteError(FAILURE_CREATED);
                Console.WriteLine(END_PROCESS);
                Console.ReadKey();
            }
        }
예제 #2
0
파일: LZ77.cs 프로젝트: okkt/jn18
 public void Compress(string path)
 {
     writer     = new CompressedFileWriter(path + ".lz");
     bitBuffer  = new List <bool>();
     dictionary = new StringBuilder();
     phrase     = string.Empty;
     using (var streamReader = new StreamReader(path))
     {
         var chars = new char[CHAR_BLOCK_LENGTH];
         while (!streamReader.EndOfStream)
         {
             var readChars       = streamReader.ReadBlock(chars, 0, CHAR_BLOCK_LENGTH);
             var dataToBeEncoded = new StringBuilder(new string(chars.Take(readChars).ToArray()));
             compressBlock(dataToBeEncoded);
         }
         writer.WriteBlock(bitBuffer);
     }
     writer.Close();
 }