【发布时间】:2020-11-03 18:44:35
【问题描述】:
(这是使用 Unity 2020.1.4f1 和 Trilib 2.0.9 模型加载器)
我正在尝试从 zipStream 中提取字节(在 Unity 中将 bytes[] 加载到 Texture2D.LoadImage() 中)。你是怎么做到的?
这是我尝试过的以及我得到的错误:
我收到错误消息:“无法访问已关闭的流。”对于
Stream zipStream = zipFile.GetInputStream(e)其中e是ZipEntry来自 一个ZipFile(由一个闭源sdk产生)
Stream zipStream = zipFile.GetInputStream(e); // error occurs here
tex.LoadImage(ReadFully(zipStream));
tex.Apply();
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
e 在循环中提取 - 如果这很重要
foreach (ZipEntry e in zipFile)
{
if (e.IsFile)
{ ...
ObjectDisposedException: Cannot access a closed Stream.
System.IO.MemoryStream.Seek (System.Int64 offset, System.IO.SeekOrigin loc) (at <fb001e01371b4adca20013e0ac763896>:0)
ICSharpCode.SharpZipLib.Zip.ZipFile.TestLocalHeader (ICSharpCode.SharpZipLib.Zip.ZipEntry entry, ICSharpCode.SharpZipLib.Zip.ZipFile+HeaderTest tests) (at <1a5a474a643a454ba874ca384c215100>:0)
ICSharpCode.SharpZipLib.Zip.ZipFile.LocateEntry (ICSharpCode.SharpZipLib.Zip.ZipEntry entry) (at <1a5a474a643a454ba874ca384c215100>:0)
ICSharpCode.SharpZipLib.Zip.ZipFile.GetInputStrea
【问题讨论】:
-
我不熟悉 Unity 的东西,但我仍然希望看到您使用的完整方法,以便了解如何获取和传递流。
-
我所拥有的只是
ZipFile作为一个对象 - 我能够迭代它以获得它的ZipEntry,而e.Name似乎可以工作......也许问题是你怎么样打开ZipFile以提取单个ZipEntry流? -
那么,你想打开一个压缩文件并从中读取单个文件,对吗?
-
我不确定您将如何从
ZipFile对象创建ZipFile。它不直接接受构造函数中的 zipfile 对象来克隆它。
标签: c# unity3d sharpziplib