Search code examples
dotnetzip

DotNetZip - This stream does not support seek operations


When I try and extract the "test.png" I receive the following error: This stream does not support seek operations.

Also can a wildcard be used? var entry = zipout["*.png"]; I will not know the same when streaming.

            var request = (HttpWebRequest)WebRequest.Create("http://www.xxx.xxxx.com/xxx/xxxx?key=ndXqH2fXzePomlVoX39trxUf%2FV1bfN0rZsHsTyEvI%2F0%3D&labelFormat=png");

            using (var ms = new MemoryStream())
            {
               using (var response = (HttpWebResponse)request.GetResponse())
               {
                  using (var stream =response.GetResponseStream())
                  {
                    using (var zipout = ZipFile.Read(stream))
                    {
                        var entry = zipout["test.png"];
                        entry.Extract(ms);
                    }
                  }
                }
            }

Updated

            using (var response = request.GetResponse())
            {
                using (var responseStream = response.GetResponseStream())
                {
                    using (var stream = new MemoryStream())
                    {
                        if (responseStream != null)
                        {
                            responseStream.CopyTo(stream);
                        }

                        using (var zipout = ZipFile.Read(stream))
                        {
                            using (var ms = new MemoryStream())
                            {
                                var entry = zipout["test.png"];
                                entry.Extract(ms);
                            }
                        }
                    }
                }
            }

New error: Message = "Cannot read that as a ZipFile"


Solution

  • var request = (HttpWebRequest)WebRequest.Create("var request = (HttpWebRequest)WebRequest.Create("http://www.xxx.xxxx.com/xxx/xxxx?key=ndXqH2fXzePomlVoX39trxUf%2FV1bfN0rZsHsTyEvI%2F0%3D&labelFormat=png");
    
                using (var response = request.GetResponse())
                {
                    using (var responseStream = response.GetResponseStream())
                    {
                        using (var stream = new MemoryStream())
                        {
                            if (responseStream == null)
                            {
                                return;
                            }
    
                            responseStream.CopyTo(stream); 
                            stream.Position = 0;
    
                            using (var zipout = ZipFile.Read(stream))
                            {
                                using (var ms = new MemoryStream())
                                {
                                    var entry = zipout["test.png"];
    
                                    if (entry != null)
                                    {
                                        entry.Extract(ms);
                                    }
                                    else
                                    {
                                        return;
                                    }
                                }
                            }
                        }
                    }
                }