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

            }


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

                                }

                            }

                        }

                    }

                }

            }

        }


    }

  • 相关阅读:
    bobojquery筛选数组之grep、each、inArray、map的用法及遍历json对象 [转]
    bobojquery遍历json键值对
    python安装与初始
    Lambda表达式
    静态代理模式
    多线程
    java日期时间
    Git安装
    Node.js环境安装
    Maven的使用
  • 原文地址:https://www.cnblogs.com/cbcye/p/1407672.html
Copyright © 2020-2023  润新知