微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TriLib SharpZipLib.Zip.ZipEntry-无法访问GetInputStream的关闭流

如何解决TriLib SharpZipLib.Zip.ZipEntry-无法访问GetInputStream的关闭流

(这是将Unity 2020.1.4f1与Trilib 2.0.9 Model Loader一起使用)

我正在尝试从zipStream中提取字节(以将bytes[]加载到Unity中的Texture2D.LoadImage()中)。你如何做到的?

这是我尝试过的和出现的错误

我收到错误消息:“无法访问关闭的流”。对于Stream zipStream = zipFile.GetInputStream(e),其中e是来自{ ZipEntry(由封闭式SDK产生)

ZipFile

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,buffer.Length)) > 0) { ms.Write(buffer,read); } return ms.ToArray(); } } 在循环中提取-如果重要的话

e
foreach (ZipEntry e in zipFile)
        {
            if (e.IsFile)
            { ... 

解决方法

因此,我们在聊天中讨论了该问题,而ZipFile的问题是,它不包含文件名,也没有Stream。从技术上讲,这意味着我们无法在ZipFile对象中获取单个文件的流。

场景:他们正在使用TriLib并传递服务器上可用的zip文件的URL。 TriLib所做的是,它获取文件和信息,将其解析为一个对象,并在完成后将该对象返回给方法。

问题ZipFile对象不包含有关单个文件及其Stream的信息,也没有名称,因此Name属性为空。这意味着我们无法对ZipFile对象执行任何操作。

解决方案:我们制作了一个自定义下载器,将文件下载到磁盘上,然后将下载的文件传递给ZipFile构造函数,通过这种方法,我们将所有信息都存储在内部一个zip文件。

,

我相信问题在于每个zip条目的输入流都连接到整个文件的输入流。关闭该流将导致文件流关闭。删除条目流周围的using,我相信您的代码应该可以使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。