写的不错,打赏一下

CompressHelper

 public static string CompressString(string unCompressedString)
        {
            byte[] bytData = System.Text.Encoding.UTF8.GetBytes(unCompressedString);
            MemoryStream ms = new MemoryStream();
            using (Stream s = new GZipStream(ms, CompressionMode.Compress))
            {
                s.Write(bytData, 0, bytData.Length);
                s.Close();
            }
            byte[] compressedData = (byte[])ms.ToArray();

            return System.Convert.ToBase64String(compressedData, 0, compressedData.Length);
        }

        /// <summary>
        /// 解压字符串
        /// 
        /// </summary>
        /// <param name="unCompressedString"></param>
        /// <returns></returns>
        public static string DecompressString(string unCompressedString)
        {
            System.Text.StringBuilder uncompressedString = new System.Text.StringBuilder();
            byte[] writeData = new byte[4096];

            byte[] bytData = System.Convert.FromBase64String(unCompressedString);
            int totalLength = 0;
            int size = 0;

            using (Stream s = new GZipStream(new MemoryStream(bytData), CompressionMode.Decompress))
            {
                while (true)
                {
                    size = s.Read(writeData, 0, writeData.Length);
                    if (size > 0)
                    {
                        totalLength += size;
                        uncompressedString.Append(System.Text.Encoding.UTF8.GetString(writeData, 0, size));
                    }
                    else
                    {
                        break;
                    }
                }
                s.Close();
            }
            return uncompressedString.ToString();
        }

        /// <summary>
        /// 提供文件名称列表和压缩后保存的文件名称,对指定文件进行压缩
        /// </summary>
        /// <param name="fileName">需要压缩的文件列表</param>
        /// <param name="compressFileName">压缩后存放的文件名称</param>
        /// <returns></returns>
        public static bool CompressFiles(IList<string> fileName, string compressFileName)
        {
            bool result = false;
            try
            {
                ArrayList fileList = new ArrayList();

                List<byte[]> byteList = new List<byte[]>();
                foreach (string item in fileName)
                {
                    if (File.Exists(item))
                    {
                        CompressFileInfo fileInfo = new CompressFileInfo();
                        fileInfo.FileName = Path.GetFileName(item);
                        fileInfo.FileBuffer = File.ReadAllBytes(item);
                        fileList.Add(fileInfo);
                    }
                }

                IFormatter formatter = new BinaryFormatter();
                using (Stream s = new MemoryStream())
                {
                    formatter.Serialize(s, fileList);
                    s.Position = 0;
                    CreateCompressFiles(s, compressFileName);
                    result = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return result;
        }
        /// <summary>
        /// 将指定的压缩文件进行解压,并输出到指定路径中
        /// </summary>
        /// <param name="fileName">需要解压的文件全名</param>
        /// <param name="outputPath">解压后文件存放路径</param>
        /// <returns></returns>
        public static bool DecompressFiles(string fileName, string outputPath)
        {
            bool result = false;
            using (Stream source = File.OpenRead(fileName))
            {
                using (Stream destination = new MemoryStream())
                {
                    using (GZipStream input = new GZipStream(source, CompressionMode.Decompress, true))
                    {
                        byte[] bytes = new byte[4096];
                        int n;
                        while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
                        {
                            destination.Write(bytes, 0, n);
                        }
                    }
                    destination.Flush();
                    destination.Position = 0;
                    DeserializeFileInfo(destination, outputPath);
                    result = true;

                }
            }

            return result;
        }

        /// <summary>
        /// 将需要压缩的文件流进行压缩,然后保存到指定的文件下
        /// </summary>
        /// <param name="sourceStream"></param>
        /// <param name="compressFileName"></param>
        private static void CreateCompressFiles(Stream sourceStream, string compressFileName)
        {
            using (Stream destination = new FileStream(compressFileName, FileMode.Create, FileAccess.Write))
            {
                using (GZipStream output = new GZipStream(destination, CompressionMode.Compress))
                {
                    byte[] bytes = new byte[4096];
                    int n;
                    while ((n = sourceStream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        output.Write(bytes, 0, n);
                        
                    }
                }
            }

        }

        /// <summary>
        /// 反序列化文件描述对象
        /// </summary>
        /// <param name="sourceStream"></param>
        /// <param name="outputPath"></param>
        private static void DeserializeFileInfo(Stream sourceStream, string outputPath)
        {
            BinaryFormatter b = new BinaryFormatter();
            ArrayList list = (ArrayList)b.Deserialize(sourceStream);

            foreach (CompressFileInfo item in list)
            {
                string newName =Path.Combine(outputPath , item.FileName);
                using (FileStream fs = new FileStream(newName, FileMode.Create, FileAccess.Write))
                {
                    fs.Write(item.FileBuffer, 0, item.FileBuffer.Length);
                    fs.Close();
                }
            }
        }

  

posted @ 2016-10-19 14:38  不负春光,努力生长  阅读(500)  评论(0编辑  收藏  举报