热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Unity文件压缩

publicclassZIP{publicvoidGetPaths(stringrootPath,string[]whitelist,outListdirs,out

public class ZIP
{
public void GetPaths(string rootPath, string[] whitelist, out List dirs, out List files)
{
rootPath = rootPath.Contains("/") ? rootPath.Replace("/", "\\") : rootPath;
rootPath = rootPath.EndsWith("\\") ? rootPath : rootPath + "\\";
dirs = new List();
files = new List();
foreach (var item in whitelist)
{
string path = Path.Combine(rootPath, item);
if (Directory.Exists(path))
{
string dirName = item.EndsWith("\\") ? item : item + "\\";
if (!dirs.Contains(dirName))
{
dirs.Add(dirName);
}
GetPaths(rootPath, path, dirs, files);
}
else if (File.Exists(path))
{
if (!files.Contains(item))
{
files.Add(item);
}
}
}
}
public void GetPaths(string rootPath, string dirPath, List dirs, List files)
{
rootPath = rootPath.Contains("/") ? rootPath.Replace("/", "\\") : rootPath;
rootPath = rootPath.EndsWith("\\") ? rootPath : rootPath + "\\";
foreach (var file in Directory.GetFiles(dirPath))
{
string filePath = file.Contains("/") ? file.Replace("/", "\\") : file;
string fileName = filePath.Replace(rootPath, "");
if (!files.Contains(fileName))
{
files.Add(fileName);
}
}
foreach (var subDir in Directory.GetDirectories(dirPath))
{
string subDirPath = subDir.Contains("/") ? subDir.Replace("/", "\\") : subDir;
string subDirName = subDirPath.Replace(rootPath, "");
subDirName = subDirName.EndsWith("\\") ? subDirName : subDirName + "\\";
if (!dirs.Contains(subDirName))
{
dirs.Add(subDirName);
}
GetPaths(rootPath, subDir, dirs, files);
}
}
public bool Zip(string rootPath, string[] _fileOrDirectoryArray, string _outputPathName, string _password = null, int level = 6)
{
if ((null == _fileOrDirectoryArray) || string.IsNullOrEmpty(_outputPathName))
{
return false;
}
ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create(_outputPathName));
zipOutputStream.SetLevel(level); // 压缩质量和压缩速度的平衡点
if (!string.IsNullOrEmpty(_password))
zipOutputStream.Password = _password;
GetPaths(rootPath, _fileOrDirectoryArray, out List dirs, out List files);
foreach (var dirName in dirs)
{
ZipEntry entry = new ZipEntry(dirName);
entry.DateTime = DateTime.Now;
entry.Size = 0;
zipOutputStream.PutNextEntry(entry);
zipOutputStream.Flush();
}
foreach (var fileName in files)
{
ZipEntry entry = new ZipEntry(fileName);
entry.DateTime = DateTime.Now;
byte[] buffer = File.ReadAllBytes(Path.Combine(rootPath, fileName));
entry.Size = buffer.Length;
zipOutputStream.PutNextEntry(entry);
zipOutputStream.Write(buffer, 0, buffer.Length);
}
zipOutputStream.Finish();
zipOutputStream.Close();
return true;
}
public void Unzip(byte[] zipData,string unzipDirPath)
{
ZipEntry zip = null;
Stream stream = new MemoryStream(zipData);
ZipInputStream zipInStream = new ZipInputStream(stream);
//循环读取Zip目录下的所有文件
while ((zip = zipInStream.GetNextEntry()) != null)
{
string path = Path.Combine(unzipDirPath, zip.Name);
if (zip.IsDirectory)
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
else if(zip.IsFile)
{
if (File.Exists(path))
{
File.Delete(path);
}
byte[] data = new byte[(int)zipInStream.Length];
zipInStream.Read(data, 0, data.Length);
File.WriteAllBytes(path, data);
}
}
if (zipInStream != null)
{
zipInStream.Close();
}
if (stream!=null)
{
stream.Close();
}
}
}

  

用到的库是:

using ICSharpCode.SharpZipLib.Zip;//文档:https://icsharpcode.github.io/SharpZipLib/help/api/ICSharpCode.SharpZipLib.Zip.ZipFile.html


博客园Jason_c微信打赏码

如果本篇文档对你有帮助,打赏Jason_c根华子吧,他的私房钱被老婆没收了,呜呜!



推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • OpenCV4.5.0+contrib编译流程及解决错误方法
    本文介绍了OpenCV4.5.0+contrib的编译流程,并提供了解决常见错误的方法,包括下载失败和路径修改等。同时提供了相关参考链接。 ... [详细]
author-avatar
Eliza
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有