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;
                }
            }
        }
    }
}
 

Комментарии

Популярные сообщения