zoukankan      html  css  js  c++  java
  • 压缩解压

    public class ZipHerlper
        {
            #region 压缩zip
            public static bool CreateZipDirectory(string dirPath, string zipFilePath)
            {
                bool success = false;
                FileInfo zipFile = new FileInfo(zipFilePath);
                if (zipFile.Exists)
                {
                    zipFile.Delete();
                }
    
                ZipOutputStream zipStream = new ZipOutputStream(File.Create(zipFilePath));
                try
                {
                    if (dirPath[dirPath.Length - 1] != System.IO.Path.DirectorySeparatorChar)
                        dirPath += System.IO.Path.DirectorySeparatorChar;
                    zipStream.SetLevel(9);// 压缩级别 0-9
                    byte[] buffer = new byte[4096]; //缓冲区大小
                    CreateZipFiles(dirPath, zipStream, dirPath, buffer);
                    success = true;
                }
                catch (Exception ex)
                {
                    success = false;
                }
                finally
                {
                    zipStream.Finish();
                    zipStream.Close();
                    zipFile = new FileInfo(zipFilePath);
                    if (!success && zipFile.Exists)
                    {
                        zipFile.Delete();
                    }
                }
                return success;
            }
    
            public static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream, string staticFile, byte[] buffer)
            {
                string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);
                foreach (string file in filesArray)
                {
                    if (!file.EndsWith(".pdb") && !file.Contains(".vshost.exe"))
                    {
                        if (Directory.Exists(file))
                        {
                            CreateZipFiles(file, zipStream, staticFile, buffer);
                        }
                        else
                        {
                            ZipEntry entry = new ZipEntry(file.Substring(staticFile.LastIndexOf("\") + 1));
                            entry.DateTime = DateTime.Now;
                            zipStream.PutNextEntry(entry);
                            using (FileStream fs = File.OpenRead(file))
                            {
                                int sourceBytes;
                                do
                                {
                                    sourceBytes = fs.Read(buffer, 0, buffer.Length);
                                    zipStream.Write(buffer, 0, sourceBytes);
                                } while (sourceBytes > 0);
                            }
                        }
                    }
                }
            }
            #endregion
    
            /// <summary>
            /// 解压
            /// </summary>
            /// <param name="zip"></param>
            /// <param name="path"></param>
            public static void UnZip(string zip, string path)
            {
                ZipInputStream s = new ZipInputStream(File.OpenRead(zip));
                ZipEntry theEntry;
                while ((theEntry = s.GetNextEntry()) != null)
                {
    
                    string directoryName = Path.GetDirectoryName(path);
                    string fileName = Path.GetFileName(theEntry.Name);
                    //生成解压目录
    
                    if (!Directory.Exists(directoryName))
                    {
                        Directory.CreateDirectory(directoryName);
                    }
                    if (theEntry.Name.Contains("\") || theEntry.Name.Contains("/"))
                    {
                        string subPath = Path.GetDirectoryName(path + theEntry.Name);
                        if (!Directory.Exists(subPath))
                        {
                            Directory.CreateDirectory(subPath);
                        }
                    }
                    if (fileName != String.Empty)
                    {
                        //解压文件到指定的目录
                        FileStream streamWriter = File.Create(path + theEntry.Name);
    
                        int size = 2048;
                        byte[] data = new byte[2048];
                        while (true)
                        {
                            size = s.Read(data, 0, data.Length);
                            if (size > 0)
                            {
                                streamWriter.Write(data, 0, size);
                            }
                            else
                            {
                                break;
                            }
                        }
    
                        streamWriter.Close();
                    }
                }
                s.Close();
            }
        }
    ZipHelper
            private void button1_Click(object sender, EventArgs e)
            {
                FolderBrowserDialog dialog = new FolderBrowserDialog();
                dialog.Description = "请选择文件路径";
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    string foldPath = dialog.SelectedPath;
                    ZipHerlper.CreateZipDirectory(foldPath, foldPath+".Zip");
                    MessageBox.Show("压缩完成");
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                OpenFileDialog fileDialog = new OpenFileDialog();
                fileDialog.Multiselect = true;
                fileDialog.Title = "请选择文件";
                fileDialog.Filter = "所有文件(*.*)|*.*";
                if (fileDialog.ShowDialog() == DialogResult.OK)
                {
                    string file = fileDialog.FileName;
                    string ss = file.Substring(0, file.LastIndexOf('.'));
                    ZipHerlper.UnZip(file, file.Substring(0,file.LastIndexOf('.'))+"\");
                    MessageBox.Show("解压完成");
                }
            }
    调用

    ICSharpCode.SharpZipLib.dll需要引用

  • 相关阅读:
    讨论: TDD in HTML & JavaScript 之可行性和最佳实践
    Enterprise Caching Summary
    NIntegrate SOA Practice – EAppointments Sample Application
    This is jqMVC# Definition & Summary
    LRU Caching Practice
    NIntegrate v0.9.0.1 released
    CrossDomain AJAX Enabled WCF Service
    突然发现想在博客园发起一个有价值的讨论其实很难
    Discuss some new features in WCF 4.0
    This is jqMVC# – CNBLOGS Google Tracer Sample
  • 原文地址:https://www.cnblogs.com/junhuang/p/6437899.html
Copyright © 2011-2022 走看看