unity 中解压zip的方法

 之前用的下边这种方法,发现在工程中没有问题,打包出来之后抛出异常,看了日志,发现是解压的问题

  /// <summary>
    /// 解压的方法,打包抛出异常
    /// </summary>
    //public void OpenZip(string strZipPath, string strUnZipPath)
    //{
    //    //string strZipPath = Application.streamingAssetsPath + "\\1.zip";//需要解压的文件
    //    //string strUnZipPath = Application.streamingAssetsPath + "\\111"; //解压的路径
    //    //print(strZipPath);
    //    //print(strUnZipPath);
    //    bool overWrite = true;//设置是否覆盖文件
    //    ReadOptions options = new ReadOptions();
    //    options.Encoding = Encoding.Default;//设置编码,解决解压文件时中文乱码
    //    using (ZipFile zip = ZipFile.Read(strZipPath, options))
    //    {
    //        foreach (ZipEntry entry in zip)
    //        {
    //            if (string.IsNullOrEmpty(strUnZipPath))
    //            {
    //                strUnZipPath = strZipPath.Split('.')[0];
    //            }
    //            if (overWrite)
    //            {
    //                entry.Extract(strUnZipPath, ExtractExistingFileAction.OverwriteSilently);//解压文件,如果已存在就覆盖
    //            }
    //            else
    //            {
    //                entry.Extract(strUnZipPath, ExtractExistingFileAction.DoNotOverwrite);//解压文件,如果已存在不覆盖
    //            }
    //        }

    //    }

    //}

后来又找了第二种方法

 /// <summary>
    /// 解压的方法,可打包
    /// </summary>
    /// <param name="source">要解压的压缩包</param>
    /// <param name="targetPath">解压路径</param>
    public static void DecompressToDirectory(Stream source, string targetPath)
    {
        targetPath = Path.GetFullPath(targetPath);
        using (ZipInputStream decompressor = new ZipInputStream(source))
        {
            ZipEntry entry;

            while ((entry = decompressor.GetNextEntry()) != null)
            {
                string name = entry.Name;
                if (entry.IsDirectory && entry.Name.StartsWith("\\"))
                    name = entry.Name.Replace("\\", "");

                string filePath = Path.Combine(targetPath, name);
                string directoryPath = Path.GetDirectoryName(filePath);

                if (!string.IsNullOrEmpty(directoryPath) && !Directory.Exists(directoryPath))
                    Directory.CreateDirectory(directoryPath);

                if (entry.IsDirectory)
                    continue;

                byte[] data = new byte[2048];
                using (FileStream streamWriter = File.Create(filePath))
                {
                    int bytesRead;
                    while ((bytesRead = decompressor.Read(data, 0, data.Length)) > 0)
                    {
                        streamWriter.Write(data, 0, bytesRead);
                    }
                }
            }
        }
    }

仅供参考

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值