关于Unity Zip文件解压缩设计
unity中可能会使用到Zip文件解压缩的操作
例如:Unity Editor环境下,解压缩文件 到unity Assets 文件路劲下,再对解压缩文件进一步操作!
解压缩的方法
- DotNetZip
- 7-Zip
- 其他(无非调用解压缩内核)
DotNetZip示例
using AXClipperLib;
using Ionic.Zip;
using JUN.Xmpp.Iq.Privacy;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;
using Action = System.Action;
public class DotNetZip : Singleton<DotNetZip>
{
internal void UnpackPackage(string filename, string folder)
{
var ok = CheckZipIsOK(filename);//检查Zip文件是否正确
string[] importExtensions = {
".obj", ".fbx", ".dae",".prefab" };//需要额外操作的文件 文件扩展名
if (ok)
{
using (ZipFile file = new ZipFile(filename, Encoding.UTF8))
{
file.FlattenFoldersOnExtract = false;
var status = new StringWriter();
file.StatusMessageTextWriter = status;
//记录需要额外操作文件的文件路径
List<string> modelFileList = new List<string>();
List<string> prefebFileList = new List<string>();
//取出不需要操作的其他文件
foreach (var entry in file.Entries)
{
string name = entry.FileName.ToLowerInvariant();
if (!importExtensions.Any(e => {
return name.EndsWith(e); }))
entry.Extract(folder, ExtractExistingFileAction.OverwriteSilently);
}
//取出需要操作的文件
foreach (var entry in file.Entries)
{
string name = entry.FileName.ToLowerInvariant();
if (name.EndsWith(".obj") || name.EndsWith(".fbx") || name.EndsWith(".dae"))
{
entry.Extract(folder, ExtractExistingFileAction.OverwriteSilently