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
        
    {
            
    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);
                }

            }

         

            //解压缩
            ///zipfilepath 源路径

            ///UnfilePath 解压后的路径

            private static void UnZipFile( string zipFilePath,string unfilepath)
            
    {
                
    if (!File.Exists(zipFilePath))
                
    {
                    Console.WriteLine(
    "Cannot find file '{0}'", zipFilePath);
                    
    return;
                }

            string directoryName = Path.GetDirectoryName(theEntry.Name);

              // create directory
                 if (directoryName.Length > 0)
                
    {
                   Directory.CreateDirectory(directoryName);
                }

                using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
                
    {

                    ZipEntry theEntry;

              
                    
    while ((theEntry = s.GetNextEntry()) != null)
                    
    {

                        Console.WriteLine(theEntry.Name);

                        string fileName = Path.Combine(unZipFilePath,theEntry.Name);

                        

                        
    if (fileName != String.Empty)
                        
    {
                            
    using (FileStream streamWriter = File.Create(fileName))
                            
    {

                                
    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;
                                    }

                                }

                     streamWriter.close();                     
                            }

                        }

                    }

            s.close();
                }

            }

        }


    }

    原文出自:http://www.cnblogs.com/cbcye/archive/2009/03/10/1407672.html

  • 相关阅读:
    Vue中的混入对象mixins
    iView组件样式修改
    理解Vue.use
    webpack中的require.context
    Vue对象中的混入对象mixins
    nodejs获取客户端ip地址
    Typescript 实战 --- (3)接口
    Typescript 实战 --- (2)枚举
    进击JavaScript核心 --- (3)面向对象
    在windows中使用 nvm 实现node多版本管理
  • 原文地址:https://www.cnblogs.com/songling/p/2172254.html
Copyright © 2011-2022 走看看