Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DotNetZip失败,返回“0”;流不支持搜索操作“;_C#_Asp.net Mvc_Stream_Dotnetzip - Fatal编程技术网

C# DotNetZip失败,返回“0”;流不支持搜索操作“;

C# DotNetZip失败,返回“0”;流不支持搜索操作“;,c#,asp.net-mvc,stream,dotnetzip,C#,Asp.net Mvc,Stream,Dotnetzip,我在C#中使用DotNetZip从流中解压,如下所示: public static void unzipFromStream(Stream stream, string outdir) { //omit try catch block using (ZipFile zip = ZipFile.Read(stream)){ foreach (ZipEntry e in zip){ e.Extract(outdir, ExtractExisting

我在C#中使用DotNetZip从流中解压,如下所示:

public static void unzipFromStream(Stream stream, string outdir)
{   //omit try catch block
    using (ZipFile zip = ZipFile.Read(stream)){
        foreach (ZipEntry e in zip){
            e.Extract(outdir, ExtractExistingFileAction.OverwriteSilently);
        }
    }
}
流是使用

WebClient client = new WebClient();
Stream fs = client.OpenRead(url);
然而,我得到了以下例外

exception during extracting zip from stream System.NotSupportedException: This stream does not support seek operations.
at System.Net.ConnectStream.get_Position()
at Ionic.Zip.ZipFile.Read(Stream zipStream, TextWriter statusMessageWriter, Encoding encoding, EventHandler`1 readProgress)
在服务器端(ASP.NET MVC 4),返回
FilePathResult
FileStreamResult
都会导致此异常


我应该在客户端以不同的方式获取流吗?或者如何使服务器返回“可查找”流?谢谢

您必须将数据下载到文件或内存中,然后创建
文件流
内存流
,或其他支持查找的流类型。例如:

WebClient client = new WebClient();
client.DownloadFile(url, filename);
using (var fs = File.OpenRead(filename))
{
    unzipFromStream(fs, outdir);
}
File.Delete(filename);
或者,如果数据将装入内存:

byte[] data = client.DownloadData(url);
using (var fs = new MemoryStream(data))
{
    unzipFromStream(fs, outdir);
}

谢谢,吉姆!数据大小是否仅受内存限制?或者相反,C#?@green
MemoryStream
有一些大小限制(
Int32.MaxValue
最大字节数,但在此之前它可能会失败,并且会出现OutOfMemoryException)<代码>文件流仅受硬盘大小的限制。