.net 压缩、解压文件

做web技术有时候要向客户返回一些文件如:excel、word、甚至是一些视频、音频等。但当数据量过大的时候,我们可能要考虑到用要用压缩(或者批量压缩)处理的方式把问价传送给客户端。下面介绍一种功能较为稳定的压缩、解压工具。此处以压缩为例。

第一步:要下载一个第三方的解、压缩组件叫: ICSharpCode.SharpZipLib.dll

第二步:引入到项目的解决方案中。

以上准备工作做好以后下面开干(一下实例为压缩多个文件):

 

首先在button的click事件中调用压缩的方法:

 protected void btnExportZip_Click(object sender, EventArgs e)
        {           

                // 定义一个泛型集合去存储要压缩的源文件的信息
                List<FileInfo> fileInfos = new List<FileInfo>();

                // 要压缩的问价名集合一个文件名集合

                string[] Names = {@"H:/demo1.xls", @"H:/demo2.xls"};
                foreach (string filename in Names)
                {
                    FileInfo file = new FileInfo(filename); // 根据返回的文件名获取文件的信息
                    fileInfos.Add(file); // 添加文件到信息集合
                }


                // 存储压缩文件名,用GUID防止多次压缩后的文件重复。 Server.MapPath("./excelCD/")为服务器下的一个文件夹存储压缩文件

                string zipFileName = Server.MapPath("./excelCD/") + "userInfo" + Guid.NewGuid().ToString() + ".zip"; 
                File.WriteAllText(zipFileName, "");  // 创建空文件


                Compress(fileInfos, zipFileName, 2, 800);  // 调用压缩方法
          
        }

  // 参数依次为:文件信息集合,准备压缩到的文件名,压缩质量(0~9依次增加),休眠时间(单位:毫秒)

 public static void Compress(List<FileInfo> fileNames, string zipFileName, int CompressionLevel, int SleepTimer)
        {
            ZipOutputStream s = new ZipOutputStream(File.Create(zipFileName));
            try
            {
                s.SetLevel(CompressionLevel);   
                foreach (FileInfo file in fileNames)
                {
                    FileStream fs = null;
                    try
                    {
                        fs = file.Open(FileMode.Open, FileAccess.ReadWrite);
                    }
                    catch
                    {

                        continue;

                   }
                    //  将文件分批读入缓冲区  
                    byte[] data = new byte[2048];
                    int size = 2048;
                    ZipEntry entry = new ZipEntry(Path.GetFileName(file.Name));
                    entry.DateTime = (file.CreationTime > file.LastWriteTime ? file.LastWriteTime : file.CreationTime);
                    s.PutNextEntry(entry);
                    while (true)
                    {
                        size = fs.Read(data, 0, size);
                        if (size <= 0) break;
                        s.Write(data, 0, size);
                    }
                    fs.Close();
                    file.Delete();
                    Thread.Sleep(SleepTimer);
                }
            }
            finally
            {
                s.Finish();
                s.Close();
            }
        }

 

// 做完以上操作就能够找到自己压缩的文件了,但是这只是把文件压缩到自己的服务器上,如果要把压缩后的文件推送到客户端就要用到另一种技术了,请参考我的博客“将文件传送到客户端”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值