之前用的下边这种方法,发现在工程中没有问题,打包出来之后抛出异常,看了日志,发现是解压的问题
/// <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);
}
}
}
}
}
仅供参考