public void Read() { try { int countRead; byte[] buffer = new byte[bufferSize]; using (FileStream input = new FileStream(inputFile, FileMode.Open, FileAccess.Read)) { while ((countRead = input.Read(buffer, 0, bufferSize)) > 0 && !Canceler.IsCancel) { byte[] lastBuffer = new byte[countRead]; Buffer.BlockCopy(buffer, 0, lastBuffer, 0, countRead); readBuffer.EnqueueBytes(lastBuffer); } readBuffer.Close(); } } catch (Exception ex) { Console.WriteLine(ex.Message); Canceler.Cancel(); readBuffer.Close(); } }
public void Decompress(object threadNumber) { try { Chunk inputChunk; while (readBuffer.TryDequeue(out inputChunk) && !Canceler.IsCancel) { using (MemoryStream memory = new MemoryStream(inputChunk.Buffer)) { using (GZipStream gzip = new GZipStream(memory, CompressionMode.Decompress)) { int countRead; byte[] buffer = new byte[bufferSize]; countRead = gzip.Read(buffer, 0, buffer.Length); byte[] lastBuffer = new byte[countRead]; Buffer.BlockCopy(buffer, 0, lastBuffer, 0, countRead); Chunk outputChunk = new Chunk(inputChunk.Id, lastBuffer); writeBuffer.Enqueue(outputChunk); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); Canceler.Cancel(); readBuffer.Clear(); writeBuffer.Clear(); } }
public void Write() { try { using (FileStream output = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) { BinaryFormatter formatter = new BinaryFormatter(); Chunk chunk; while (writeBuffer.TryDequeue(out chunk) && !Canceler.IsCancel) { formatter.Serialize(output, chunk); } } if (Canceler.IsCancel) { writeBuffer.Close(); File.Delete(outputFile); } } catch (Exception ex) { Console.WriteLine(ex.Message); Canceler.Cancel(); writeBuffer.Clear(); File.Delete(outputFile); } }
public void Write() { try { using (FileStream output = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) { Chunk chunk; while (writeBuffer.TryDequeue(out chunk) && !Canceler.IsCancel) { byte[] buffer = chunk.Buffer; output.Write(buffer, 0, buffer.Length); } } if (Canceler.IsCancel) { writeBuffer.Close(); File.Delete(outputFile); } } catch (Exception ex) { Console.WriteLine(ex.Message); Canceler.Cancel(); writeBuffer.Clear(); File.Delete(outputFile); } }
static void Main(string[] args) { var time = Stopwatch.StartNew(); canceler = new Canceler(); Console.CancelKeyPress += new ConsoleCancelEventHandler(cancelHandler); try { ValidateCommandLineInput(args); var mode = args[0]; var inputFile = args[1]; var outputFile = args[2]; gzipper = new Gzipper(inputFile, outputFile, canceler); if (mode == "compress") { gzipper.Compress(); } else { gzipper.Decompress(); } Console.WriteLine($"time Elapsed - {time.Elapsed.TotalSeconds}"); } catch (Exception e) { Console.WriteLine(e.Message); canceler.Cancel(); } }
public void Compress(object threadNumber) { try { Chunk inputChunk; while (readBuffer.TryDequeue(out inputChunk) && !Canceler.IsCancel) { using (MemoryStream memory = new MemoryStream()) { using (GZipStream gzip = new GZipStream(memory, CompressionMode.Compress)) using (BinaryWriter bwriter = new BinaryWriter(gzip)) { bwriter.Write(inputChunk.Buffer, 0, inputChunk.Buffer.Length); } byte[] outBuffer = memory.ToArray(); Chunk outputChunk = new Chunk(inputChunk.Id, outBuffer); writeBuffer.Enqueue(outputChunk); } } } catch (Exception ex) { Console.WriteLine(ex.Message); Canceler.Cancel(); readBuffer.Clear(); writeBuffer.Clear(); } }
public void Read() { try { BinaryFormatter formatter = new BinaryFormatter(); Chunk chunk; using (FileStream input = new FileStream(inputFile, FileMode.Open, FileAccess.Read)) { while (input.Position < input.Length && !Canceler.IsCancel) { chunk = (Chunk)formatter.Deserialize(input); readBuffer.Enqueue(chunk); } readBuffer.Close(); } } catch (Exception ex) { Console.WriteLine(ex.Message); Canceler.Cancel(); readBuffer.Close(); } }
static void cancelHandler(object sender, ConsoleCancelEventArgs args) { Console.WriteLine("Progrem canceled by user"); args.Cancel = true; canceler.Cancel(); }