C# Задачи: Написать программу на C#, предназначенную для сжатия и расжатия файлов с помощью System.IO.Compression.GzipStream.
Написать программу на C#, предназначенную для сжатия и расжатия файлов с помощью System.IO.Compression.GzipStream.
Решение:
Решение:
using System; using System.Linq; using System.IO; using System.IO.Compression; namespace ConsoleApplication1 { class Program { //Написать программу на C#, предназначенную для сжатия и расжатия файлов с помощью System.IO.Compression.GzipStream. static void Main(string[] args) { if (args.Length==1) { Console.WriteLine(" /u to unzip"); Console.WriteLine(" /z to zip"); Console.WriteLine(" /i={filepath} inputfile"); Console.WriteLine(" /o={filepath} outputfile"); } string infile = ""; string outfile=""; string operation=""; if (args.Length > 1) { if (args.Contains("/z")) operation = "zip"; if (args.Contains("/u")) operation = "unzip"; if ((from att in args where att.Contains("/i=")==true select att).Count()>0) infile = (from file in args where file.Contains("/i=") select file).First().Replace("/i=", "").Replace("\"", ""); if ((from att in args where att.Contains("/o=")==true select att).Count()>0) outfile = (from file in args where file.Contains("/o=") select file).First().Replace("/o=", "").Replace("\"", ""); Console.WriteLine(operation); if (infile != "") { if (outfile != "") { Console.WriteLine(infile); Console.WriteLine(outfile); if (outfile != infile ) { if (operation=="zip") { try { using (FileStream fsin = new FileStream(infile, FileMode.Open, FileAccess.Read, FileShare.Read)) using (FileStream fsout = new FileStream(outfile, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) using (GZipStream gz = new GZipStream(fsout, CompressionMode.Compress, false)) { byte[] buffer = new byte[1024]; int pos = 0; int len; do { len = fsin.Read(buffer, 0, 1024); gz.Write(buffer, 0, len); pos += len; } while (len >= 1024); } Console.WriteLine("OK"); return; } catch (Exception ee) { Console.WriteLine("ERROR\n\r" + ee.Message + "\n\r" + ee.Source + "\n\r" + ee.StackTrace ); return; } } if (operation == "unzip") { try { using (FileStream fsin = new FileStream(infile, FileMode.Open, FileAccess.Read, FileShare.Read)) using (FileStream fsout = new FileStream(outfile, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) using (GZipStream gz = new GZipStream(fsin, CompressionMode.Decompress, false)) { byte[] buffer = new byte[1024]; int pos = 0; int len; do { len = gz.Read(buffer, 0, 1024); fsout.Write(buffer, 0, len); pos += len; } while (len >= 1024); } Console.WriteLine("OK"); return; } catch (Exception ee) { Console.WriteLine("ERROR\n\r" + ee.Message + "\n\r" + ee.Source + "\n\r" + ee.StackTrace); return; } } } else { Console.WriteLine("ERROR\n\rИмя исходного и конечного файлов совпадают!"); return; } } else { Console.WriteLine("ERROR\n\rИмя конечного файла не указано!"); return; } } else { Console.WriteLine("ERROR\n\rИмя исходного файла не указано!"); return; } } } } }
Комментарии