public void TestCancel() { var compression = new Compression(); var almostEndlessStream = new AlmostEndlessStreamMock(); using (var dst = new MemoryStream()) { var thread = new Thread(() => { Thread.Sleep(TimeSpan.FromSeconds(0.1)); compression.Cancel(); }); thread.Start(); compression.CompressAsaiwa(almostEndlessStream, dst); } }
static void Main(string[] args) { if (args.Length < 2) { Display.ShowMessage("Not All Parameters are Specified!"); } string Mode = "compress"; if (args[0].ToLower().Equals("decompress")) { Mode = "decompress"; } else if (!args[0].ToLower().Equals("compress")) { Display.ShowMessage("Operation Not Specified!"); return; } char[] wrong = { '/', ':', '?', '*', '<', '>', '|', '"' }; string SrcFileName = args[1]; if (Path.GetFileName(SrcFileName).IndexOfAny(wrong) >= 0) { Display.ShowMessage("Wrong Source File Path!"); return; } if (!File.Exists(SrcFileName)) { Display.ShowMessage("Source File Not Exists!"); return; } string DstFileName = args[2]; if (!Directory.Exists(Path.GetDirectoryName(DstFileName)) || Path.GetFileName(DstFileName).IndexOfAny(wrong) >= 0) { Display.ShowMessage("Wrong Destination File Path!"); return; } if (File.Exists(DstFileName)) { if (!Display.ShowMessage("Destination File Exists!\r\nDo You Want to Overwrite it? (y/n): ", true)) { return; } File.Delete(DstFileName); } GZip gz = null; if (Mode.Equals("compress")) { gz = new Compression(SrcFileName, DstFileName); } else { gz = new Decompression(SrcFileName, DstFileName); } gz.Process(); }
private static int Main(string[] args) { CompressionMode mode; string srcFileName; string dstFileName; if (!ValidateStartupAgrs(args, out mode, out srcFileName, out dstFileName)) { Console.WriteLine("The syntax of the command params is incorrect. Showld be: (compress|decompress) Source Destination" ); return ErrorAppExitCode; } var compression = new Compression(); compression.ProgressChanged += (_,__) => Console.Write("░"); Console.CancelKeyPress += (sender, e) => { e.Cancel = true; compression.Cancel(); Console.WriteLine("\nCancelling..."); }; try { using (var srcFile = new FileStream(srcFileName, FileMode.Open, FileAccess.Read)) { using (var dstFile = new FileStream(dstFileName, FileMode.Create, FileAccess.Write)) { switch (mode) { case CompressionMode.Compress: compression.CompressAsaiwa(srcFile, dstFile); //compression.Compress(srcFile, dstFile); break; case CompressionMode.Decompress: compression.DecompressAsaiwa(srcFile, dstFile); //compression.Decompress(srcFile, dstFile); break; } } } Console.WriteLine(); Console.WriteLine("Done: "+ dstFileName); } catch (Exception e) { File.Delete(dstFileName); // Не уверен, хорошая это идея или нет. // Вероятно, правильный вариант -- складывать результат во временный файл рядом, // а после удачного выполнения заменять уже существующий файл с таким имененем (если он есть) свежесозданным. // В случае неудачи старый файл окажется целым. if (!(e is OperationCanceledException)) { var errorLogFile = WriteErrorLog(e, dstFileName); Console.WriteLine(e.Message + Environment.NewLine + "For details please see " + errorLogFile); // в это место на диске можно писать (если запрет не стал причиной экспешена) и, наверное, // пользователь именно там будет искать результат, и найдет описание причины неудачи } return ErrorAppExitCode; } return SuccessAppExitCode; }