欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现文件压缩与解压的方法示例【ZIP格式】

程序员文章站 2023-11-21 09:01:46
本文实例讲述了c#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下: 在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是rar的,但是...

本文实例讲述了c#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下:

在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是rar的,但是由于rar不是一个开放的标准,因此zip成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如sharpziplib就是一个不错的选择。

组件的使用比较简单,请参照下面的代码。点击下载项目源码

/*
 * gary zhang -- cbcye@live.com
 * www.cbcye.com
 * www.quicklearn.cn
 * cbcye.cnblogs.com
 */
using system;
using system.collections.generic;
using system.text;
using system.io;
using icsharpcode.sharpziplib.zip;
using system.diagnostics;
using icsharpcode.sharpziplib.core;
namespace testconsole
{
  class program
  {
    static void main()
    {
      //createzipfile(@"d:\", @"d:\a.zip");
      unzipfile(@"d:\a.zip");
      console.read();
    }
    private static void createzipfile(string filespath, string zipfilepath)
    {
      if (!directory.exists(filespath))
      {
        console.writeline("cannot find directory '{0}'", filespath);
        return;
      }
      try
      {
        string[] filenames = directory.getfiles(filespath);
        using (zipoutputstream s = new zipoutputstream(file.create(zipfilepath)))
        {
          s.setlevel(9); // 压缩级别 0-9
          //s.password = "123"; //zip压缩文件密码
          byte[] buffer = new byte[4096]; //缓冲区大小
          foreach (string file in filenames)
          {
            zipentry entry = new zipentry(path.getfilename(file));
            entry.datetime = datetime.now;
            s.putnextentry(entry);
            using (filestream fs = file.openread(file))
            {
              int sourcebytes;
              do
              {
                sourcebytes = fs.read(buffer, 0, buffer.length);
                s.write(buffer, 0, sourcebytes);
              } while (sourcebytes > 0);
            }
          }
          s.finish();
          s.close();
        }
      }
      catch (exception ex)
      {
        console.writeline("exception during processing {0}", ex);
      }
    }
    private static void unzipfile( string zipfilepath)
    {
      if (!file.exists(zipfilepath))
      {
        console.writeline("cannot find file '{0}'", zipfilepath);
        return;
      }
      using (zipinputstream s = new zipinputstream(file.openread(zipfilepath)))
      {
        zipentry theentry;
        while ((theentry = s.getnextentry()) != null)
        {
          console.writeline(theentry.name);
          string directoryname = path.getdirectoryname(theentry.name);
          string filename = path.getfilename(theentry.name);
          // create directory
          if (directoryname.length > 0)
          {
            directory.createdirectory(directoryname);
          }
          if (filename != string.empty)
          {
            using (filestream streamwriter = file.create(theentry.name))
            {
              int size = 2048;
              byte[] data = new byte[2048];
              while (true)
              {
                size = s.read(data, 0, data.length);
                if (size > 0)
                {
                  streamwriter.write(data, 0, size);
                }
                else
                {
                  break;
                }
              }
            }
          }
        }
      }
    }
  }
}

更多关于c#相关内容感兴趣的读者可查看本站专题:《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结

希望本文所述对大家c#程序设计有所帮助。