Use SharpZIpLib wrote compression and decompression operations class

Compression and decompression operations using written SharpZIpLib class, have been tested.

 public class ZipHelper
    {
        /// <summary>
        /// 压缩文件
        /// </summary>
        /// <param name="directory"></param>
        /// <param name="targetPath"></param>
        public static void Zip(string directory, string targetPath)
        {
            using (var stream = new ZipOutputStream(File.OpenWrite(targetPath)))
            {
                Zip(directory, stream);
            }
        }

        private static void Zip(string directory, ZipOutputStream stream, string entryName = "")
        {
            //压缩文件
            var files = Directory.GetFiles(directory);
            var buffer = new byte[4096];
            foreach (string file in files)
            {
                var entry = new ZipEntry(entryName + Path.GetFileName(file));
                entry.DateTime = DateTime.Now;
                stream.PutNextEntry(entry);

                using (var fs = File.OpenRead(file))
                {
                    int sourceBytes;
                    do
                    {
                        sourceBytes = fs.Read(buffer, 0, buffer.Length);
                        stream.Write(buffer, 0, sourceBytes);
                    } while (sourceBytes > 0);
                }
            }

            //压缩子目录
            var subDirectories = Directory.GetDirectories(directory);
            foreach (var subDirectory in subDirectories)
            {
                var subEntryName = Path.GetFileName(subDirectory) + "/";
                var entry = new ZipEntry(subEntryName);
                entry.DateTime = DateTime.Now;
                stream.PutNextEntry(entry);
                stream.Flush();

                Zip(subDirectory, stream, subEntryName);
            }
        }

        /// <summary>
        /// 解压zip文件
        /// </summary>
        /// <param name="zipfilePath"></param>
        /// <param name="targetDirectory"></param>
        public static void Unzip(string zipfilePath, string targetDirectory)
        {
            if (!File.Exists(zipfilePath))
                return;

            if(!Directory.Exists(targetDirectory))
                Directory.CreateDirectory(targetDirectory);

            using (var stream = new ZipInputStream(File.OpenRead(zipfilePath)))
            {
                ZipEntry ent = null;
                while ((ent = stream.GetNextEntry()) != null)
                { 
                    IF ( String .IsNullOrEmpty (ent.Name))
                         Continue ; 

                    var path = Path.Combine (TargetDirectory, ent.Name); 
                    path = path.Replace ( ' / ' , ' \\ ' ); 

                    // create a directory 
                    IF ( path.EndsWith ( " \\ " )) 
                    { 
                        Directory.CreateDirectory (path); 
                        Continue ; 
                    } 

                    // Create a file 
                    the using ( var FS = File.Create(path))
                    {
                        var buffer = new byte[2048];
                        var lengthRead = 0;
                        while ((lengthRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                            fs.Write(buffer, 0, lengthRead);
                    }

                }
            }
        }

    }

 

Guess you like

Origin www.cnblogs.com/guanglin/p/12090875.html