使用C#DotNetZip在内存中提取zip文件失败

使用C#DotNetZip在内存中提取zip文件失败,c#,zip,dotnetzip,C#,Zip,Dotnetzip,我正在尝试下载并解压缩C#中的zip文件,特别是DotNetZip 当我运行此代码时 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(reportUrl); HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); Stream stream = response.GetResponseStr

我正在尝试下载并解压缩C#中的zip文件,特别是DotNetZip

当我运行此代码时

        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(reportUrl);
        HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
        Stream stream = response.GetResponseStream();
        MemoryStream ms = new MemoryStream();

        stream.CopyTo(ms);
        ms.Seek(0, 0);
        ZipInputStream zip = new ZipInputStream(ms);
        zip.Seek(0, 0);

        ZipEntry e = zip.GetNextEntry();
        string s = e.FileName;

        MemoryStream ms2 = new MemoryStream();
        e.Extract(ms2);
执行Extract方法后,我得到

        $exception  {"Object reference not set to an instance of an object."}   System.Exception {System.NullReferenceException}
有什么想法吗?谢谢


很难说为什么代码不起作用。我将首先简化它,并确保我正确处理所有可支配资源,如流:

class Program
{
    static void Main()
    {
        var url = "http://downloads.sourceforge.net/project/junit/junit/3.8.1/junit3.8.1.zip";
        using (var client = new WebClient())
        using (var zip = ZipFile.Read(client.DownloadData(url)))
        {
            foreach (var entry in zip)
            {
                entry.Extract(".");
            }        
        }
    }
}

请确保您签出了使用DotNetZip库的文档。

我的直接想法是InputStream为空。您尝试了使用不同的memorystream实例吗?您所说的“Extract方法执行后”是什么意思?它在抛出异常之前是否正确执行?提取后的下一行代码是什么?好吧,我想知道InputStream是否也为null,但我无法找出ZipInputStream的构造中有什么错误会导致这种情况。我不确定它是否应该是什么,因为我的印象是一个ZipEntry已经从创建它的流中复制了它的数据。@Ethan,函数结束了。很抱歉不清楚,Extract方法抛出异常。嘿,谢谢你的回答,Darin!但是,这并不适合我(.NET4.0,DotNetZip的最新版本)。我不想依靠我不存在的C#来破坏你的答案。。。从Byte.Array(DownloadData return value)到IO.Stream(读取命令所需)的最佳方式是什么???@Charles Offenbacher,您遇到了什么错误?因为我刚刚在我的Win7 x64 VS2010.NET 4.0上测试了这段代码,它运行得非常好。ZipFile.Read似乎只接受文件名字符串或流…奇怪的是,我也在VS2010.NET 4.0 Win7 x64上…嗯。。。1秒。@Charles Ofenbacher,
ZipFile.Read有许多重载。为了方便起见,在我的示例中,我使用了一个字节数组,因为这恰好是从
client.DownloadData
方法返回的。我看到了与Charles相同的错误,我刚刚通过nuget安装了DotNetZip。出于某种原因,我只看到4个重载,它们都希望流作为输入。