C# compressed file

zipHelper zip = new zipHelper();
zip.ZipFile(DatFileNameAll, TempFileNameAll);
log.WriteLog("compression Success");
public  class zipHelper
    {
    
    

        /// <summary>
        /// 压缩字节数组
        /// </summary>
        /// <param name="str"></param>
        public static byte[] Compress(byte[] inputBytes)
        {
    
    
            using (MemoryStream outStream = new MemoryStream())
            {
    
    
                using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
                {
    
    
                    zipStream.Write(inputBytes, 0, inputBytes.Length);
                    zipStream.Close(); //很重要,必须关闭,否则无法正确解压
                    return outStream.ToArray();
                }
            }
        }

        /// <summary>
        /// 解压缩字节数组
        /// </summary>
        /// <param name="str"></param>
        public static byte[] Decompress(byte[] inputBytes)
        {
    
    

            using (MemoryStream inputStream = new MemoryStream(inputBytes))
            {
    
    
                using (MemoryStream outStream = new MemoryStream())
                {
    
    
                    using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
                    {
    
    
                       // zipStream.CopyTo(outStream);
                        zipStream.Close();
                        return outStream.ToArray();
                    }
                }

            }
        }
        /// <summary>
        /// 压缩字符串
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string Compress(string input)
        {
    
    
            byte[] inputBytes = Encoding.Default.GetBytes(input);
            byte[] result = Compress(inputBytes);
            return Convert.ToBase64String(result);
        }
        /// <summary>
        /// 解压缩字符串
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string Decompress(string input)
        {
    
    
            byte[] inputBytes = Convert.FromBase64String(input);
            byte[] depressBytes = Decompress(inputBytes);
            return Encoding.Default.GetString(depressBytes);
        }
        /// <summary>
        /// 压缩目录
        /// </summary>
        /// <param name="dir"></param>
        public static void Compress(DirectoryInfo dir)
        {
    
    
            foreach (FileInfo fileToCompress in dir.GetFiles())
            {
    
    
                Compress(fileToCompress);
            }
        }
        /// <summary>
        /// 解压缩目录
        /// </summary>
        /// <param name="dir"></param>
        public static void Decompress(DirectoryInfo dir)
        {
    
    
            foreach (FileInfo fileToCompress in dir.GetFiles())
            {
    
    
                Decompress(fileToCompress);
            }
        }
        /// <summary>
        /// 压缩文件
        /// </summary>
        /// <param name="fileToCompress"></param>
        public static void Compress(FileInfo fileToCompress)
        {
    
    
            using (FileStream originalFileStream = fileToCompress.OpenRead())
            {
    
    
                if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                {
    
    
                    using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                    {
    
    
                        using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
                        {
    
    
                           // originalFileStream.CopyTo(compressionStream);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 解压缩文件
        /// </summary>
        /// <param name="fileToDecompress"></param>
        public static void Decompress(FileInfo fileToDecompress)
        {
    
    
            using (FileStream originalFileStream = fileToDecompress.OpenRead())
            {
    
    
                string currentFileName = fileToDecompress.FullName;
                string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);

                using (FileStream decompressedFileStream = File.Create(newFileName))
                {
    
    
                    using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                    {
    
    
                       // decompressionStream.CopyTo(decompressedFileStream);
                    }
                }
            }
        }


        /// <summary>
        /// </summary>
        /// <param name="sourceFileAllpath">需要压缩的文件(绝对路径)</param>
        /// <param name="FileNameByzip">压缩后的文件名称(文件名,默认 同源文件同名)</param>
        /// <param name="CompressionLevel">压缩等级(0 无 - 9 最高,默认 5)</param>
        /// <param name="BlockSize">缓存大小(每次写入文件大小,默认 2048)</param>
        /// <param name="IsEncrypt">是否加密(默认 加密)</param>
        public void ZipFile(string fileNameAllpathByzip,List<string> sourceFileAllpathList, Boolean IsdeleteSouceFile = false, int CompressionLevel = 5, int BlockSize = 2048, bool IsEncrypt = false)
        {
    
               
            using (System.IO.FileStream ZipFile = System.IO.File.Create(fileNameAllpathByzip))
            {
    
    
                using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile))
                {
    
    
                    foreach (string sourceFileAllpath in sourceFileAllpathList)
                    {
    
    
                        using (System.IO.FileStream SourceFileStream = new System.IO.FileStream(sourceFileAllpath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
                        {
    
    
                            string SourcefileName = sourceFileAllpath.Substring(sourceFileAllpath.LastIndexOf("\\") + 1);
                            ZipEntry ZipEntry = new ZipEntry(SourcefileName);
                            if (IsEncrypt)
                            {
    
                                   
                                ZipStream.Password = "123"; //压缩文件加密
                            }
                            ZipStream.PutNextEntry(ZipEntry);                           
                            ZipStream.SetLevel(CompressionLevel); //设置压缩级别
                            byte[] buffer = new byte[BlockSize]; //缓存大小
                            int sizeRead = 0;
                            do
                            {
    
    
                                sizeRead = SourceFileStream.Read(buffer, 0, buffer.Length);
                                ZipStream.Write(buffer, 0, sizeRead);
                            }
                            while (sizeRead > 0);                           
                            SourceFileStream.Close();
                        }
                    }
                    ZipStream.Finish();
                    ZipStream.Close();
                }
                ZipFile.Close();
            }
        }
        /// <summary>
        /// </summary>
        /// <param name="sourceFileAllpath">需要压缩的文件(绝对路径)</param>
        /// <param name="FileNameByzip">压缩后的文件名称(文件名,默认 同源文件同名)</param>
        /// <param name="CompressionLevel">压缩等级(0 无 - 9 最高,默认 5)</param>
        /// <param name="BlockSize">缓存大小(每次写入文件大小,默认 2048)</param>
        /// <param name="IsEncrypt">是否加密(默认不加密)</param>
        public void ZipFile(string sourceFileAllpath, string FileNameAllpathByzip, int CompressionLevel = 5, int BlockSize = 2048, bool IsEncrypt = false)
        {
    
    
            using (System.IO.FileStream ZipFile = System.IO.File.Create(FileNameAllpathByzip))
            {
    
    
                using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile))
                {
    
    
                    using (System.IO.FileStream SourceFileStream = new System.IO.FileStream(sourceFileAllpath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
                    {
    
    
                        string SourcefileName = sourceFileAllpath.Substring(sourceFileAllpath.LastIndexOf("\\") + 1);
                        ZipEntry ZipEntry = new ZipEntry(SourcefileName);
                        if (IsEncrypt)
                        {
    
                               
                            ZipStream.Password = "123"; //压缩文件加密
                        }
                        ZipStream.PutNextEntry(ZipEntry);                        
                        ZipStream.SetLevel(CompressionLevel);//设置压缩级别                        
                        byte[] buffer = new byte[BlockSize];//缓存大小
                        int sizeRead = 0;
                        try
                        {
    
    
                            do
                            {
    
    
                                sizeRead = SourceFileStream.Read(buffer, 0, buffer.Length);
                                ZipStream.Write(buffer, 0, sizeRead);
                            }
                            while (sizeRead > 0);
                        }
                        catch (Exception ex)
                        {
    
    
                            throw ex;
                        }
                        SourceFileStream.Close();
                    }
                    ZipStream.Finish();
                    ZipStream.Close();
                }
                ZipFile.Close();
            }
        }
    }

Guess you like

Origin blog.csdn.net/m0_50623581/article/details/110187756
Recommended