• Asp.net 2.0 C#实现压缩/解压功能 [转=向作者‘肖相’无私共享精神致敬]


    (一). 实现功能
        对文件及目录的压缩及解压功能
    (二). 运行图片示例

      (三).代码

       1. 压缩类

      1/// <summary>
      2/// 压缩类
      3/// </summary>

      4public class ZipClass
      5{   
      6    public static void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize)
      7    {
      8        //如果文件没有找到,则报错
      9        if (!System.IO.File.Exists(FileToZip))
     10        {
     11            throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
     12        }

     13
     14        System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
     15        System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
     16        ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
     17        ZipEntry ZipEntry = new ZipEntry("ZippedFile");
     18        ZipStream.PutNextEntry(ZipEntry);
     19        ZipStream.SetLevel(CompressionLevel);
     20        byte[] buffer = new byte[BlockSize];
     21        System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
     22        ZipStream.Write(buffer, 0, size);
     23        try
     24        {
     25            while (size < StreamToZip.Length)
     26            {
     27                int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
     28                ZipStream.Write(buffer, 0, sizeRead);
     29                size += sizeRead;
     30            }

     31        }

     32        catch (System.Exception ex)
     33        {
     34            throw ex;
     35        }

     36        ZipStream.Finish();
     37        ZipStream.Close();
     38        StreamToZip.Close();
     39    }

     40
     41    /// <summary>
     42    /// 压缩目录
     43    /// </summary>
     44    /// <param name="args">数组(数组[0]: 要压缩的目录; 数组[1]: 压缩的文件名)</param>

     45    public static void ZipFileDictory(string[] args)
     46    {
     47        string[] filenames = Directory.GetFiles(args[0]);
     48
     49        Crc32 crc = new Crc32();
     50        ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));            
     51        s.SetLevel(6); 
     52        foreach (string file in filenames)
     53        {
     54            //打开压缩文件
     55            FileStream fs = File.OpenRead(file);
     56
     57            byte[] buffer = new byte[fs.Length];
     58            fs.Read(buffer, 0, buffer.Length);
     59            ZipEntry entry = new ZipEntry(file);
     60
     61            entry.DateTime = DateTime.Now;
     62            
     63            entry.Size = fs.Length;
     64            fs.Close();
     65
     66            crc.Reset();
     67            crc.Update(buffer);
     68
     69            entry.Crc = crc.Value;
     70
     71            s.PutNextEntry(entry);
     72
     73            s.Write(buffer, 0, buffer.Length);
     74
     75        }

     76
     77        s.Finish();
     78        s.Close();
     79    }

     80
     81    /// <summary>
     82    /// 压缩文件
     83    /// </summary>
     84    /// <param name="FileToZip">要进行压缩的文件名</param>
     85    /// <param name="ZipedFile">压缩后生成的压缩文件名</param>

     86    public static void ZipFile(string FileToZip, string ZipedFile)
     87    {
     88        //如果文件没有找到,则报错
     89        if (!File.Exists(FileToZip))
     90        {
     91            throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
     92        }
                
     93        FileStream fs = File.OpenRead(FileToZip);
     94        byte[] buffer = new byte[fs.Length];
     95        fs.Read(buffer, 0, buffer.Length);
     96        fs.Close();
     97
     98        FileStream ZipFile = File.Create(ZipedFile);
     99        ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
    100        ZipEntry ZipEntry = new ZipEntry("ZippedFile");
    101        ZipStream.PutNextEntry(ZipEntry);
    102        ZipStream.SetLevel(6);
    103        
    104        ZipStream.Write(buffer, 0, buffer.Length);            
    105        ZipStream.Finish();
    106        ZipStream.Close();
    107    }

    108}

    109
    110/// <summary>
    111///  解压类
    112/// </summary>

    113public class UnZipClass
    114{
    115    /// <summary>
    116    /// 解压功能(解压压缩文件到指定目录)
    117    /// </summary>
    118    /// <param name="args">待解压的文件</param>
    119    /// <param name="args">指定解压目标目录</param>

    120    public static void UnZip(string[] args)
    121    {
    122        ZipInputStream s = new ZipInputStream(File.OpenRead(@args[0].Trim()));            
    123        ZipEntry theEntry;
    124        string directoryName = Path.GetDirectoryName(@args[1].Trim());
    125        
    126        if (!Directory.Exists(@args[1].Trim()))
    127        {
    128            Directory.CreateDirectory(directoryName);
    129        }

    130        while ((theEntry = s.GetNextEntry()) != null)
    131        {
    132            ;
    133            string fileName = Path.GetFileName(theEntry.Name);
    134
    135            if (fileName != String.Empty)
    136            {            
    137                FileStream streamWriter = File.Create(@args[1].Trim() + fileName);
    138
    139                int size = 2048;
    140                byte[] data = new byte[2048];
    141                while (true)
    142                {
    143                    size = s.Read(data, 0, data.Length);
    144                    if (size > 0)
    145                    {
    146                        streamWriter.Write(data, 0, size);
    147                    }

    148                    else
    149                    {
    150                        break;
    151                    }

    152                }

    153
    154                streamWriter.Close();
    155            }

    156        }

    157        s.Close();
    158    }

    159

    2. 前台页面代码

     1      <body>
     2    <form id="form1" runat="server">
     3    <div>
     4        &nbsp;<asp:Label ID="Label1" runat="server" BackColor="#C0C0FF" Font-Size="XX-Large"
     5            Height="44px" Text="压缩文件/文件夹示例" Width="366px"></asp:Label>
     6        <asp:Panel ID="Panel1" runat="server" Height="1px" Width="369px" BackColor="#FFFFC0">
     7            <table width="100%" height="100%">
     8                <tr>
     9                    <td style=" 3px" valign="top">
    10                        <asp:Label ID="lbDisplay" runat="server" Text="压缩目录(from/to):" Width="153px"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    11            <br />
    12            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    13            &nbsp;<br />
    14            <asp:Button ID="btZipDictory" runat="server" OnClick="btZipDictory_Click" Text="压缩目录" /><br />
    15                    </td>
    16                    <td style=" 4px" valign="middle">
    17                        <asp:Label ID="Label2" runat="server" Text="解压目录(from/to):" Width="154px"></asp:Label>
    18                        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    19                        <br />
    20                        <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
    21                        &nbsp;<br />
    22                        <asp:Button ID="btUnZipDictory" runat="server" Text="解压目录" OnClick="btUnZipDictory_Click" /><br />
    23                    </td>              
    24                </tr>
    25                <tr>
    26                    <td style=" 3px; height: 150px" valign="top">
    27                        <asp:Label ID="Label3" runat="server" Text="压缩文件(from/to):" Width="153px"></asp:Label>
    28                        <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
    29                        <br />
    30                        <asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
    31                        &nbsp;<br />
    32                        <asp:Button ID="btZipFile" runat="server" Text="压缩文件" OnClick="btZipFile_Click" /><br />
    33                    </td>
    34                    <td style=" 4px; height: 150px" valign="top">
    35                        <asp:Label ID="Label4" runat="server" Text="解压文件(from/to):" Width="154px"></asp:Label>
    36                        <asp:TextBox ID="TextBox7" runat="server"></asp:TextBox>
    37                        <br />
    38                        <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
    39                        &nbsp;<br />
    40                        <asp:Button ID="btUnZipFile" runat="server" Text="解压文件" OnClick="btUnZipFile_Click" /><br />
    41                    </td>
    42             
    43                </tr>
    44     
    45            </table>
    46            <asp:Label ID="lbMessage" runat="server" Width="368px"></asp:Label><br />
    47            <br />
    48        </asp:Panel>
    49    
    50    </div>
    51    </form>
    52</body>
    53

    3. 后台页面代码

     1public partial class _Default : System.Web.UI.Page 
     2{
     3    protected void Page_Load(object sender, EventArgs e)
     4    {
     5
     6    }

     7    protected void btZipDictory_Click(object sender, EventArgs e)
     8    {
     9        string[] FilePathS = new string[2];
    10        FilePathS[0= TextBox1.Text.Trim();  //待压缩的文件目录
    11        FilePathS[1= TextBox2.Text.Trim();  //生成的目标文件        
    12        ZipClass.ZipFileDictory(FilePathS);
    13    }

    14    protected void btUnZipDictory_Click(object sender, EventArgs e)
    15    {
    16        string[] FilePathS = new string[2];
    17        FilePathS[0= TextBox3.Text.Trim();  //待解压的文件
    18        FilePathS[1= TextBox4.Text.Trim();  //解压目标存放目录
    19        UnZipClass.UnZip(FilePathS);
    20    }

    21    protected void btZipFile_Click(object sender, EventArgs e)
    22    {
    23        string[] FilePathS = new string[2];
    24        FilePathS[0= TextBox5.Text.Trim();  //待压缩的文件
    25        FilePathS[1= TextBox6.Text.Trim();  //生成的压缩文件名
    26        ZipClass.ZipFile(FilePathS[0], FilePathS[1]);
    27
    28    }

    29    protected void btUnZipFile_Click(object sender, EventArgs e)
    30    {
    31        string[] FilePathS = new string[2];
    32        FilePathS[0= TextBox7.Text.Trim();  //待解压的文件
    33        FilePathS[1= TextBox8.Text.Trim();  //解压目标存放目录
    34        UnZipClass.UnZip(FilePathS);
    35    }

    36}

    37
    (). 示例代码下载

         https://files.cnblogs.com/ChengKing/ZIP.rar

  • 相关阅读:
    Java内部类
    Java创建对象的初始化顺序
    Java多态与动态绑定
    Java访问修饰符
    Django框架学习----视图与模板(详情页的上下篇文章跳转跳转)
    Django框架学习----视图与模板(首页与详情页的跳转)
    Django框架学习----视图与模板(显示数据库数据到页面)
    Django框架学习----视图与模板(网站页面设计)
    Django框架学习----模型层
    Logstash同步mysql数据库信息到ES
  • 原文地址:https://www.cnblogs.com/huashanlin/p/599896.html
Copyright © 2020-2023  润新知