C#フォルダをzip形式にパッケージ(フォルダとサブフォルダの下にあるすべてのファイルを含む)

3672 ワード

以前はブログが苦手でしたが、今回はブログ園にも登録して遊びました.でも内容がないので、何か追加したいですね.
最近マイクロソフトで開発されたいくつかのツールは、ファイル操作/IOに関連していることが多いので、この2、3日整理して、皆さんと共有できるかもしれないものを貼って、C#の初心者に役立つことを望んでいます.(マイクロソフトの学習者支援サイトCode smaples from Microsoftにアクセスできるコードの例:http://1code.codeplex.com 、マイクロソフトのAll-in-onecode frameworkをダウンロード  ,これは私が最近Microsoftで開発を担当している開発者のためのツールで、学習者の参考になるサンプルコードがたくさん検索できます.)
 
C#パッケージzipファイルは、既存のサードパーティdllを呼び出すことができ、半分の労力で、dllは完全に無料で、ダウンロードアドレス:SharpZipLib
解凍をダウンロードした後、ICSharpCode.SharpZipLib.dllを現在のプロジェクトのディレクトリにコピーし(サボっていれば、現在のプロジェクトのbinDebugディレクトリの下に直接コピーできます)、VS開いているプロジェクト参照にICSharpCode.SharpZipLib.dllを右クリックして追加
そして、VSで開いている項目の上で右クリックして新しいクラスを作り、ZipHelper.csと名付けて、クラスの中のすべてのcodeを空にして、以下のコードをコピーして、貼り付けます.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Core;

namespace ZipOneCode.ZipProvider
{
    public class ZipHelper
    {
        /// 
        ///     
        /// 
        /// 
        /// 
        public static void CreateZip(string sourceFilePath, string destinationZipFilePath)
        {
            if (sourceFilePath[sourceFilePath.Length - 1] != System.IO.Path.DirectorySeparatorChar)
                sourceFilePath += System.IO.Path.DirectorySeparatorChar;

            ZipOutputStream zipStream = new ZipOutputStream(File.Create(destinationZipFilePath));
            zipStream.SetLevel(6);  //      0-9
            CreateZipFiles(sourceFilePath, zipStream, sourceFilePath);

            zipStream.Finish();
            zipStream.Close();
        }

        /// 
        ///       
        /// 
        ///             
        ///      zip    (   D:\WorkSpace\a.zip),         .zip   
        /// 
        private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream, string staticFile)
        {
            Crc32 crc = new Crc32();
            string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);
            foreach (string file in filesArray)
            {
                if (Directory.Exists(file))                     //        ,  
                {
                    CreateZipFiles(file, zipStream, staticFile);
                }

                else                                            //     ,    
                {
                    FileStream fileStream = File.OpenRead(file);

                    byte[] buffer = new byte[fileStream.Length];
                    fileStream.Read(buffer, 0, buffer.Length);
                    string tempFile = file.Substring(staticFile.LastIndexOf("\\") + 1);
                    ZipEntry entry = new ZipEntry(tempFile);

                    entry.DateTime = DateTime.Now;
                    entry.Size = fileStream.Length;
                    fileStream.Close();
                    crc.Reset();
                    crc.Update(buffer);
                    entry.Crc = crc.Value;
                    zipStream.PutNextEntry(entry);

                    zipStream.Write(buffer, 0, buffer.Length);
                }
            }
        }
    }
}

 
 
使用方法は、using ZipOneCode.ZipProviderを外部参照した後、ZipHelper.CreateZip(@「D:Tempforzip」@「D:Temp 2forzip.zip」)を呼び出すのと同様です.
注意呼び出しの前に、ソースファイルパスが存在するかどうかなど、いくつかの異常状況の判断に注意することを考慮します.
 
転載先:https://www.cnblogs.com/leco/archive/2010/11/18/1881301.html