`
geovindu
  • 浏览: 17990 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Csharp 利用ICSharpCode.SharpZipLib解壓文件

 
阅读更多
/*
 *http://www.koders.com/csharp/fid7241B3C8598C20BA18652B5BB5C19D220988E2D4.aspx?s=file
 * http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
 * http://www.eggheadcafe.com/tutorials/aspnet/9ce6c242-c14c-4969-9251-af95e4cf320f/zip--unzip-folders-and-f.aspx
 * http://www.eggheadcafe.com/community/csharp/2/10060149/zip-a-file-using-icsharpcodesharpziplibzip.aspx
 * http://www.eggheadcafe.com/tutorials/csharp/9ce6c242-c14c-4969-9251-af95e4cf320f/zip--unzip-folders-and-files-with-c.aspx
 * 
 */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;
using System.IO;
using System.Collections;
using System.Windows;


namespace CompressFolders
{
    /// <summary>
    /// 20120530 
    /// 涂聚文 Geovin Du
    /// </summary>
    public partial class Form1 : Form
    {
        string strBaseDir = "";
        /// <summary>
        /// 
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            //指定文件
            //this.saveFileDialog1.Filter = "压缩文件(zip)|*.zip";
            //this.saveFileDialog1.Title = "保存文件";
            //this.saveFileDialog1.FileName = "数据备份";
            //this.saveFileDialog1.InitialDirectory =Application.StartupPath;
            //this.saveFileDialog1.RestoreDirectory = true;
            //string Fname = "";
            //if (this.saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            //{
            //    string[] filenames ={ "Properties", "Form1.resx", "frmMain.Designer.cs", "Program.cs", "Form1.Designer.cs", "Form1.resx", "frmMain.cs" };//可以自己定义所压缩的文件
            //    Fname = this.saveFileDialog1.FileName;
            //    ZipOutputStream s = new ZipOutputStream(File.Create(Fname));//创建压缩文件的目录及名称
            //    s.Password = "geovindu";//设置压缩文件的密码
            //    s.SetLevel(6);// 0 - store only to 9 - means best compression
            //    foreach (string file in filenames)
            //    {
            //        if (Directory.Exists(Application.StartupPath + @"/" + file))
            //        {
            //            strBaseDir = Application.StartupPath + @"/" + file + @"/";//压缩文件夹
            //            addZipEntry(strBaseDir, s);
            //        }
            //        else
            //        {
            //            FileStream fs = File.OpenRead(Application.StartupPath + @"/" + file);//打开文件读取
            //            byte[] buffer = new byte[fs.Length];
            //            fs.Read(buffer, 0, buffer.Length);
            //            string strEntryName = file;
            //            ZipEntry entry = new ZipEntry(strEntryName);
            //            s.PutNextEntry(entry);
            //            s.Write(buffer, 0, buffer.Length);
            //            fs.Close();
            //        }
            //    }
            //    s.Finish();
            //    s.Close();
            //}


        }
        /// <summary>
        /// 壓縮文件夾
        /// </summary>
        /// <param name="PathStr"></param>
        /// <param name="s"></param>
        private void addZipEntry(string PathStr, ZipOutputStream s)
        {
            DirectoryInfo di = new DirectoryInfo(PathStr);
            foreach (DirectoryInfo item in di.GetDirectories())
            {
                addZipEntry(item.FullName, s);
            }
            foreach (FileInfo item in di.GetFiles())
            {
                if (item.FullName.Replace(strBaseDir, "") != "Thumbs.db")
                {
                    FileStream fs = File.OpenRead(item.FullName);
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    string strEntryName = item.FullName.Replace(strBaseDir, "");
                    strEntryName = @"Properties/" + strEntryName;
                    ZipEntry entry = new ZipEntry(strEntryName);
                    s.PutNextEntry(entry);
                    s.Write(buffer, 0, buffer.Length);
                    fs.Close();
                }
            }
        }
        /// <summary>
        /// 解压缩
        /// </summary>
        /// <param name="zipfile"></param>
        /// <param name="directory"></param>
        private void Unzip(string zipfile, string directory)
        {
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }
            ZipInputStream zis = new ZipInputStream(File.OpenRead(zipfile));
            string str = zis.Password;
            zis.Password = "塗聚文";
            ZipEntry theEntry = null;
            while ((theEntry = zis.GetNextEntry()) != null)
            {
                ZipConstants.DefaultCodePage = 936;
                string directoryName = Path.GetDirectoryName(theEntry.Name);//directoryName=null
                string fileName = Path.GetFileName(theEntry.Name);
                
                if (directoryName != string.Empty)
                {
                    if ((directoryName == "Properties") && (!Directory.Exists(directory + @"/" + directoryName)))
                    {
                        Directory.CreateDirectory(directory + @"/" + directoryName);
                    }
                }
                if (fileName != string.Empty)
                {
                    FileStream streamWriter = File.Create(Path.Combine(directory, theEntry.Name));
                    int size = 2048;
                    byte[] data = new byte[2048];
                    while (true)
                    {
                        size = zis.Read(data, 0, data.Length);
                        if (size > 0)
                        {
                            streamWriter.Write(data, 0, size);
                        }
                        else
                        {
                            break;
                        }
                    }
                    streamWriter.Close();
                }
            }
            zis.Close();
        }


        /// <summary>
        ///壓縮 100M大文件進程不行
        /// 塗聚文 Geovin Du
        /// </summary>
        /// <param name="inputFolderPath"></param>
        /// <param name="outputPathAndFile"></param>
        /// <param name="password"></param>
        public static void ZipFiles(string inputFolderPath, string outputPathAndFile, string password)
        {
            ArrayList ar = GenerateFileList(inputFolderPath); // generate file list
            int TrimLength = (Directory.GetParent(inputFolderPath)).ToString().Length;
            // find number of chars to remove     // from orginal file path
            TrimLength += 1; //remove '\'
            FileStream ostream;
            byte[] obuffer;
            string outPath = inputFolderPath + @"\" + outputPathAndFile;
            ZipOutputStream oZipStream = new ZipOutputStream(File.Create(outPath)); // create zip stream
            if (password != null && password != String.Empty)
                oZipStream.Password = password;
            oZipStream.SetLevel(9); // maximum compression
            ZipEntry oZipEntry;
            foreach (string Fil in ar) // for each file, generate a zipentry
            {
                oZipEntry = new ZipEntry(Fil.Remove(0, TrimLength));
                oZipStream.PutNextEntry(oZipEntry);

                if (!Fil.EndsWith(@"/")) // if a file ends with '/' its a directory
                {
                    ostream = File.OpenRead(Fil);
                    obuffer = new byte[ostream.Length];
                    ostream.Read(obuffer, 0, obuffer.Length);
                    oZipStream.Write(obuffer, 0, obuffer.Length);
                }
            }
            oZipStream.Finish();
            oZipStream.Close();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Dir"></param>
        /// <returns></returns>
        public static ArrayList GenerateFileList(string Dir)
        {
            ArrayList fils = new ArrayList();
            bool Empty = true;
            foreach (string file in Directory.GetFiles(Dir)) // add each file in directory
            {
                fils.Add(file);
                Empty = false;
            }

            if (Empty)
            {
                if (Directory.GetDirectories(Dir).Length == 0)
                // if directory is completely empty, add it
                {
                    fils.Add(Dir + @"/");
                }
            }

            foreach (string dirs in Directory.GetDirectories(Dir)) // recursive
            {
                foreach (object obj in GenerateFileList(dirs))
                {
                    fils.Add(obj);
                }
            }
            return fils; // return file list
        }

        /// <summary>
        /// 打開選擇文件夾
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpen_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                //MessageBox.Show(fbd.SelectedPath);
                this.textBox1.Text = fbd.SelectedPath;
            }
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonSave_Click(object sender, EventArgs e)
        {
            ZipFiles(this.textBox1.Text.Trim(), this.textBox2.Text.Trim(), "geovindu");

        }
        /// <summary>
        /// 選擇文件夾
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                //MessageBox.Show(fbd.SelectedPath);
                this.textBox2.Text = fbd.SelectedPath;
            }
        }

    }
}


分享到:
评论

相关推荐

    C#利用ICSharpCode.SharpZipLib压缩解压

    如果你手头有ICSharpCode.SharpZipLib.dll文件,也可以直接将其添加为项目的引用。 在C#中使用ICSharpCode.SharpZipLib压缩文件,可以遵循以下步骤: 1. 引入必要的命名空间: ```csharp using ICSharpCode....

    ICSharpCode.SharpZipLib.dll 下载 SharpZipLib 解压缩 完整 示例 C#

    在标题和描述中提到的"ICSharpCode.SharpZipLib.dll"是该库的DLL文件,它包含了所有相关的类和方法,可以被C#项目引用以实现压缩和解压缩功能。 1. **ICSharpCode.SharpZipLib.dll下载** 要使用SharpZipLib,首先...

    .Net下利用ICSharpCode.SharpZipLib.dll实现文件压缩、解压缩

    本文将详细介绍如何使用ICSharpCode.SharpZipLib.dll这个开源库在.NET平台上进行文件的压缩与解压缩。 ICSharpCode.SharpZipLib是一个强大的压缩和解压缩库,它支持多种格式,如ZIP、GZip、BZip2等。这个库完全由C#...

    ICSharpCode.SharpZipLib.dll 多文件打包压缩附例子

    在标题和描述中提到的“多文件打包压缩附例子”,意味着我们将探讨如何使用ICSharpCode.SharpZipLib.dll来实现这一功能。 首先,我们需要引入ICSharpCode.SharpZipLib.dll到我们的项目中。这可以通过NuGet包管理器...

    C#中ICSharpCode.SharpZipLib字符串压缩

    using ICSharpCode.SharpZipLib.GZip; using ICSharpCode.SharpZipLib.Zip; ``` 对于字符串压缩,SharpZipLib提供了`GZipStream`和`DeflaterStream`类,分别用于GZip和ZIP格式的压缩。这里我们以GZip为例,演示如何...

    ICSharpCode.SharpZipLib压缩解决中文乱码dll和代码

    using ICSharpCode.SharpZipLib.Zip; using System.IO; public void CreateZipWithChineseFileName(string sourceDir, string zipFilePath) { // 创建ZipOutputStream实例 using (var stream = new ...

    ICSharpCode.SharpZipLib .net 4.0

    - 手动添加引用:下载库的DLL文件(如`ICSharpCode.SharpZipLib.dll`),将其添加到项目的引用目录,并在代码中引入相应的命名空间。 4. **示例代码**: - 创建ZIP文件: ```csharp using (FileStream fs = ...

    ICSharpCode.SharpZipLib使用代码

    using ICSharpCode.SharpZipLib.Zip; using System.IO; public void CompressFiles(string sourceDirectory, string targetArchivePath) { var files = Directory.GetFiles(sourceDirectory); using (var stream ...

    ICSharpCode.SharpZipLib.dll

    《ICSharpCode.SharpZipLib.dll在Unity中的应用与详解》 ...总的来说,ICSharpCode.SharpZipLib.dll是Unity开发者处理文件压缩和解压缩的有力工具,它的强大功能和易用性使得在各种场景下都能高效地完成文件处理任务。

    ICSharpCode.SharpZipLib.Zip.dll

    为了实现这一功能,开发者们经常需要用到各种库,其中ICSharpCode.SharpZipLib是一个非常受欢迎的选择,特别是其核心组件——ICSharpCode.SharpZipLib.Zip.dll。本文将深入探讨这个库的功能、用法以及它如何帮助...

    asp.net ICSharpCode.SharpZipLib.Zip 压缩

    对于"asp.net ICSharpCode.SharpZipLib.Zip 压缩"的主题,我们将探讨如何在ASP.NET应用中利用这个库进行文件的压缩操作。 首先,要在ASP.NET项目中使用ICSharpCode.SharpZipLib,你需要通过NuGet包管理器将该库添加...

    使用ICSharpCode.SharpZipLib.dll实现在线解压缩.rar

    本文将深入探讨如何利用ICSharpCode.SharpZipLib.dll这个开源库来实现在线解压缩rar文件。 ICSharpCode.SharpZipLib,简称SharpZipLib,是由IC#Code项目开发的一个强大的压缩和解压缩库,支持ZIP、GZIP、BZip2、Tar...

    C#-压缩-ICSharpCode.SharpZipLib

    只列举一个压缩帮助类,使用的是有要添加一个dll引用ICSharpCode.SharpZipLib.dll。另外说明一下的是,这个类压缩格式是ZIP的,所以文件的后缀写成 .zip。还有, 如果用这个类来解压rar格式的压缩文件时会报错,就...

    C#扫描控件下载ICSharpCode.SharpZipLib.dll,itextsharp.dll

    为了在C#项目中使用这些库,你需要先将ICSharpCode.SharpZipLib.dll和iTextSharp.dll文件添加到你的解决方案中。这可以通过以下步骤完成: 1. 将下载的dll文件复制到项目的“引用”文件夹。 2. 右键点击项目,选择...

    ICSharpCode.SharpZipLib

    "ICSharpCode.SharpZipLib.dll"是SharpZipLib库的二进制文件,可以直接在Unity项目中引用。将其添加到项目的Assets目录下,并在需要使用的地方通过`Assembly.Load("ICSharpCode.SharpZipLib")`来加载。这样,你就...

    调用ICSharpCode.SharpZipLib.dll压缩与解压缩

    通过ICSharpCode.SharpZipLib.dll,开发者可以轻松地在.NET应用程序中实现文件的压缩和解压缩功能。这个库不仅提供了基本的ZIP操作,还支持其他压缩格式,为.NET开发提供了丰富的压缩解决方案。

    unity读取excel文件的dll Excel.dll ICSharpCode.SharpZipLib System.Data

    1. 将压缩包解压,将“Excel.dll”、“ICSharpCode.SharpZipLib.dll”(可能包括不同版本的子文件夹)和“System.Data.dll”复制到Unity项目的“Assets/Plugins”目录下。 2. 如果Unity报错,可能需要检查.NET API...

    C#ICSharpCode.SharpZipLib.dll类库资源

    本文将深入探讨如何使用ICSharpCode.SharpZipLib.dll类库资源来在C# WinForm应用程序中实现文件和目录的压缩。 首先,为了在C#项目中使用ICSharpCode.SharpZipLib,你需要将`ICSharpCode.SharpZipLib.dll`文件添加...

    C# 利用 ICSharpCode.SharpZipLib.dll 对单个文件进行压缩

    下面将详细讲解如何使用ICSharpCode.SharpZipLib.dll来压缩单个文件。 首先,确保你已经将ICSharpCode.SharpZipLib库添加到项目中。这可以通过NuGet包管理器完成,搜索"SharpZipLib"并安装。 接下来,我们来看一下...

Global site tag (gtag.js) - Google Analytics