Esempio n. 1
0
File: Program.cs Progetto: RkeyQQ/GZ
        /// <summary>
        /// Console starting point to compress or decompress file.
        /// Determines chunk size and memory buffer to limit RAM usage.
        /// </summary>
        /// <param name="args">Must comply GZipTest.exe compress/decompress [initial file name][restul file name]</param>
        /// <returns>Returns 0 if success or 1 if error happened</returns>
        static int Main(string[] args)
        {
            int chunkSize     = 1024 * 1024;
            int memBufferSize = 3;      // max chunks in memory buffer per each buffer

            if (ParameterValidator.Validate(args) == false)
            {
                return(1);
            }
            string fileToProcess = args[1];
            string fileResult    = args[2];

            try
            {
                long length = new FileInfo(fileToProcess).Length;
                if (length == 0)
                {
                    File.Create(fileResult);
                    return(0);
                }

                if (length < chunkSize)                                 // File is smaller than chunk size
                {
                    chunkSize = (int)length;                            // file size would be used instead
                }
                IGzipOperations job = null;
                if (args[0] == "compress")
                {
                    job = new Compressor(chunkSize);
                }
                else if (args[0] == "decompress")
                {
                    job = new Decompressor();
                }

                var actionManager = new ActionManager(fileToProcess, fileResult, memBufferSize, job);
                var threadWorker  = new ThreadWorker(actionManager);
                threadWorker.StartThreads();
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: " + ex.Message);
                return(1);
            }
            return(0);
        }