C# DotNetZip失败,返回“0”;流不支持搜索操作“;
我在C#中使用DotNetZip从流中解压,如下所示: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
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)<代码>文件流仅受硬盘大小的限制。