NET中SharpZipLib 的使用(一)【壓縮與解壓】

風靈使發表於2018-07-22

壓縮的Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;

namespace SharpZipLibUse
{
    class Program
    {
        static void Main(string[] args)
        {
            //壓縮檔案

            //得到一個壓縮檔案,流
            FileStream zipFile = new FileStream("Demo.zip", FileMode.Create);

            //建立一個壓縮流,寫入壓縮流中的內容,自動被壓縮
            ZipOutputStream zos = new ZipOutputStream(zipFile);


            //當前目錄
            DirectoryInfo di = new DirectoryInfo(".");

            FileInfo[] files = di.GetFiles("*.txt");

            byte[] buffer = new byte[10 * 1024];

            foreach (FileInfo fi in files)
            {
                //第一步,寫入壓縮的說明
                ZipEntry entry = new ZipEntry(fi.Name);

                entry.Size = fi.Length;

                //儲存
                zos.PutNextEntry(entry);

                //第二步,寫入壓縮的檔案內容

                int length=0;

                Stream input=fi.Open(FileMode.Open);
                while ((length=input.Read(buffer,0,10*1024))>0)
                    {
                             zos.Write(buffer,0,length);
                    }

                input.Close();
            }

            zos.Finish();
            zos.Close();

            Console.WriteLine("Ok!");
            Console.Read();
        }
    }
}

執行結果如圖:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述


解壓的Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ICSharpCode.SharpZipLib.Zip;
using System.IO;

namespace ZipDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //萬物皆物件
            //一個壓縮檔案看成一個物件

            ZipFile zf = new ZipFile("Program.zip");

            //一個壓縮檔案內,包括多個被壓縮的檔案
            foreach (ZipEntry entry in zf)
            {
                //一個被壓縮檔案,稱為一個條目
                Console.WriteLine("壓縮包內檔名:" + entry.Name);
                Console.WriteLine("壓縮包大小:" + entry.Size);

                //解壓出被壓縮的檔案
                FileStream fs = new FileStream(entry.Name, FileMode.Create);

                //獲取從壓縮包中讀取資料的流
                Stream input = zf.GetInputStream(entry);

                byte[] buffer = new byte[10 * 1024];

                int length = 0;
                while ((length = input.Read(buffer, 0, 10 * 1024)) > 0)
                {
                    fs.Write(buffer, 0, length);

                }
                fs.Close();
                input.Close();
            }

            Console.Read();
        }
    }
}

執行結果如圖:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

相關文章