0

如何将物理 zip 文件转换为 System.IO.Stream 对象?我试过了 -

  1. System.IO.Stream stream = File.ReadAllBytes(Path + "\\" + "ZipFile.zip");
  2. StreamReader stream = new StreamReader(Path + "\\" + "ZipFile.zip");
  3. System.IO.Stream stream = new FileStream(Path + "\\" + "ZipFile.zip", FileMode.Open); stream.Close();

他们似乎都没有工作。
尝试读取流时,它要么说流不可读,
要么文件在目的地似乎损坏并且无法解压缩

4

3 回答 3

1

试试这个代码。要使用这个代码,你必须下载dotnetzip-ionic.dll

using Ionic.Zip;
using Ionic.Crc;
using System.IO;

protected void Page_Load(object sender, EventArgs e)
    {

using (ZipFile zip = ZipFile.Read(ZipPath))
    {

        foreach (ZipEntry entry in zip)
        {

            CrcCalculatorStream reader = entry.OpenReader();
            MemoryStream memstream = new MemoryStream();
            reader.CopyTo(memstream);
            byte[] bytes = memstream.ToArray();
            System.IO.Stream stream = new System.IO.MemoryStream(bytes); 


        }
    }
}
于 2013-04-11T05:09:27.610 回答
1
  1. 没有办法让它编译(转换byte[]Stream)......所以不确定你如何在这里得到运行时错误。
  2. StreamReader不是流 - 不确定您在这里期望什么转换。
  3. 看起来您立即关闭了流 - 这似乎是唯一与标题匹配的行并且会产生确切的运行时错误。修复 - 在您完成读取之前不要关闭流。
于 2013-04-11T04:47:31.820 回答
0

ZipInputStream从 SharpZipLib 看一下: https ://github.com/icharpcode/SharpZipLib

通过https://stackoverflow.com/a/593036/301152

于 2013-04-11T04:55:36.337 回答