unity打包文件夹成zip格式(包括文件夹和子文件夹下的所有文件)

打包需要用到第三方的dll==》ICSharpCode.SharpZipLib.dll,可以到官网去下载http://icsharpcode.github.io/SharpZipLib/

下载之后解压,把包含ICSharpCode.SharpZipLib.dll的bin文件夹拖到unity中去。

之后就是代码的编写了:

using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Core;

public class ZipHelper : MonoBehaviour
{

    void Start()
    {
       
        CreateZip(Application.dataPath+"/Image",Application.dataPath+"/NewImage.zip");
    }


    /// 
    /// 压缩文件
    /// 
    /// 
    /// 
    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(9);  // 压缩级别 0-9
        CreateZipFiles(sourceFilePath, zipStream);
        zipStream.Finish();
        zipStream.Close();
    }
    /// 
    /// 递归压缩文件
    /// 
    /// 待压缩的文件或文件夹路径
    /// 打包结果的zip文件路径(类似 D:\WorkSpace\a.zip),全路径包括文件名和.zip扩展名
    /// 
    private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream)
    {
        Crc32 crc = new Crc32();
        string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);
        foreach (string file in filesArray)
        {
            if (Directory.Exists(file))                     //如果当前是文件夹,递归
            {
                CreateZipFiles(file, zipStream);
            }
            else                                            //如果是文件,开始压缩
            {
                FileStream fileStream = File.OpenRead(file);
                byte[] buffer = new byte[fileStream.Length];
                fileStream.Read(buffer, 0, buffer.Length);
                string tempFile = file.Substring(sourceFilePath.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);
            }
        }
    }
}

解压完要是在unity中看不到,刷新一遍就好了。


你可能感兴趣的:(unity3D个人记录)