4

我正在尝试下载并提取 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}

有什么想法吗?谢谢!

这是方法运行之前对象的样子

4

1 回答 1

3

很难说为什么你的代码不起作用。我将首先简化它并确保我正确处理所有一次性资源,例如流:

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 库的有用示例。

于 2011-06-16T18:57:57.877 回答