• Asp.net中文件的压缩与解压


     这里笔者为大家介绍在asp.net中使用文件的压缩与解压。在asp.net中使用压缩给大家带来的好处是显而易见的,首先是减小了服务器端文件存储的空间,其次下载时候下载的是压缩文件想必也会有效果吧,特别是比较大的文件。有的客户可能会很粗心上传的是文件,那么可以通过判断后缀名来判断文件,不是压缩文件,就可以压缩文件,在存储。

      这里笔者引用了一个DLL文件(ICSharpCode.SharpZipLib.dll)(包含在本文代码中),调用其中的函数,就可以对文件进行压缩及解压了。其中压缩笔者主要用到的函数是

    复制代码
    1 ///<summary>
    2 /// 压缩文件
    3 ///</summary>
    4 ///<param name="fileName">要压缩的所有文件(完全路径)</param>
    5 ///<param name="name">压缩后文件路径</param>
    6 ///<param name="Level">压缩级别</param>
    7  publicvoid ZipFileMain(string[] filenames, string name, int Level)
    8 {
    9 ZipOutputStream s =new ZipOutputStream(File.Create(name));
    10 Crc32 crc =new Crc32();
    11 //压缩级别
    12 s.SetLevel(Level); // 0 - store only to 9 - means best compression
    13 try
    14 {
    15 foreach (string file in filenames)
    16 {
    17 //打开压缩文件
    18 FileStream fs = File.OpenRead(file);
    19
    20 byte[] buffer =newbyte[fs.Length];
    21 fs.Read(buffer, 0, buffer.Length);
    22
    23 //建立压缩实体
    24 ZipEntry entry =new ZipEntry(System.IO.Path.GetFileName(file));
    25
    26 //时间
    27 entry.DateTime = DateTime.Now;
    28
    29 // set Size and the crc, because the information
    30 // about the size and crc should be stored in the header
    31 // if it is not set it is automatically written in the footer.
    32 // (in this case size == crc == -1 in the header)
    33 // Some ZIP programs have problems with zip files that don't store
    34 // the size and crc in the header.
    35 //空间大小
    36 entry.Size = fs.Length;
    37 fs.Close();
    38 crc.Reset();
    39 crc.Update(buffer);
    40 entry.Crc = crc.Value;
    41 s.PutNextEntry(entry);
    42 s.Write(buffer, 0, buffer.Length);
    43 }
    44 }
    45 catch
    46 {
    47 throw;
    48 }
    49 finally
    50 {
    51 s.Finish();
    52 s.Close();
    53 }
    54
    55 }
    复制代码

    解压缩的主要代码

    复制代码
    1 ///<summary>
    2 /// 解压文件
    3 ///</summary>
    4 ///<param name="ZipPath">被解压的文件路径</param>
    5 ///<param name="Path">解压后文件的路径</param>
    6 publicvoid UnZip(string ZipPath,string Path)
    7 {
    8 ZipInputStream s =new ZipInputStream(File.OpenRead(ZipPath));
    9
    10 ZipEntry theEntry;
    11 try
    12 {
    13 while ((theEntry = s.GetNextEntry()) !=null)
    14 {
    15 string fileName = System.IO.Path.GetFileName(theEntry.Name);
    16
    17 //生成解压目录
    18 Directory.CreateDirectory(Path);
    19
    20 if (fileName != String.Empty)
    21 {
    22 //解压文件
    23 FileStream streamWriter = File.Create(Path + fileName);
    24
    25 int size =2048;
    26 byte[] data =newbyte[2048];
    27 while (true)
    28 {
    29 size = s.Read(data, 0, data.Length);
    30 if (size >0)
    31 {
    32 streamWriter.Write(data, 0, size);
    33 }
    34 else
    35 {
    36
    37 streamWriter.Close();
    38 streamWriter.Dispose();
    39 break;
    40 }
    41 }
    42
    43 streamWriter.Close();
    44 streamWriter.Dispose();
    45 }
    46 }
    47 }
    48 catch
    49 {
    50 throw;
    51 }
    52 finally
    53 {
    54 s.Close();
    55 s.Dispose();
    56 }
    57 }
    58 }
    复制代码

    那么我这里做了个简单的测试程序(点击下载

     

    这里已知道要被压缩文件,这里只需填入要被压缩到的路径("D: ext")解压路径一样。这里解压级别越大,压缩的就越厉害。

    可以看测试小程序,将解压/压缩引入到你的项目中

  • 相关阅读:
    从汇编的角度看待const与#define
    从汇编的角度看待变量类型与sizeof的机制
    按字节对齐分析
    堆内存和栈内存的探索
    string源码实现分析
    string源码分析 ——转载 http://blogs.360.cn/360cloud/2012/11/26/linux-gcc-stl-string-in-depth/
    开始了
    atoi函数的实现——面试
    new与malloc的区别,以及内存分配浅析
    [C]C语言中EOF是什么意思?
  • 原文地址:https://www.cnblogs.com/fengyingwang/p/3402100.html
Copyright © 2020-2023  润新知