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 に答える