Извлечение zip-файла в память не удается с помощью C # DotNetZip - PullRequest
4 голосов
/ 16 июня 2011

Я пытаюсь скачать и распаковать ZIP-файл в C #, в частности, 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}

Есть мысли? Спасибо!

Here's what the object looks like before the method runs

1 Ответ

3 голосов
/ 16 июня 2011

Трудно сказать, почему ваш код не работает.Я хотел бы начать с упрощения и обеспечения правильной утилизации всех одноразовых ресурсов, таких как потоки:

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.

...