zoukankan      html  css  js  c++  java
  • C# 文件压缩与解压(ZIP格式)

    在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是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
    {
    staticvoid Main()
    {
    //CreateZipFile(@"d:\", @"d:\a.zip");
    UnZipFile(@"d:\a.zip");

    Console.Read();
    }


    privatestaticvoid 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 =newbyte[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);
    }

    }


    privatestaticvoid 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 =newbyte[2048];
    while (true)
    {
    size
    = s.Read(data, 0, data.Length);
    if (size >0)
    {
    streamWriter.Write(data,
    0, size);
    }

    else
    {
    break;
    }

    }

    }

    }

    }

    }

    }

    }


    }

  • 相关阅读:
    20165205 2017-2018-2 《Java程序设计》实验三 敏捷开发与XP实践
    20165205 2017-2018-2 《Java程序设计》第八周学习总结
    20165205 2017-2018-2《Java程序设计》结对编程一 第二周总结
    20165104 第一周学习心得
    Linux安装及命令入门
    做中学learning by doing个人感想
    我所期望的师生关系
    2018-2019 20165235《信息安全系统设计基础》第三周学习总结
    20165235 缓冲区溢出漏洞实验
    2018-2019-20165235 《信息安全系统设计基础》第二周学习总结
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/vcmv.html
Copyright © 2011-2022 走看看