好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

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

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

?

/*

  * Gary Zhang -- cbcye@live测试数据

  * HdhCmsTestcbcye测试数据

  * HdhCmsTestquicklearn.cn

  * cbcye.cnblogs测试数据

  */

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#程序设计有所帮助。

dy("nrwz");

查看更多关于C#实现文件压缩与解压的方法示例【ZIP格式】的详细内容...

  阅读:40次