Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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创建Zip文件时出错:存档意外结束_C#_Asp.net_Zip_Dotnetzip_Winrar - Fatal编程技术网

C# 使用DotNetZip创建Zip文件时出错:存档意外结束

C# 使用DotNetZip创建Zip文件时出错:存档意外结束,c#,asp.net,zip,dotnetzip,winrar,C#,Asp.net,Zip,Dotnetzip,Winrar,我有一个使用DotNetZip压缩一个或多个文件的方法,它一直工作正常。今天我第一次收到一个错误,它似乎与存档的总大小有关。使用相同的60mb.tiff图像,我会添加一些额外的副本,测试,重复。它工作正常,直到添加了大约10个图像,然后,当我使用WinRar打开Zip文件时,会出现“意外的归档结束”错误。通过这种方式进行测试,我相信我已经排除了与我的代码或文件相关的问题(损坏或其他)。代码没有错误,只有WinRar。当我打开Zip文件时,只显示一个大小为“0”的文件。因此,似乎达到了某种大小限制

我有一个使用DotNetZip压缩一个或多个文件的方法,它一直工作正常。今天我第一次收到一个错误,它似乎与存档的总大小有关。使用相同的60mb.tiff图像,我会添加一些额外的副本,测试,重复。它工作正常,直到添加了大约10个图像,然后,当我使用WinRar打开Zip文件时,会出现“意外的归档结束”错误。通过这种方式进行测试,我相信我已经排除了与我的代码或文件相关的问题(损坏或其他)。代码没有错误,只有WinRar。当我打开Zip文件时,只显示一个大小为“0”的文件。因此,似乎达到了某种大小限制,不允许创建存档。我只是不知道它是哪一个极限。这是我的代码,如果有帮助的话:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AddHeader("content-disposition", "filename=" + "MyFileName" + DateTime.Now.ToString("MMddyyyy") + ".zip");

using (var zip = new Ionic.Zip.ZipFile())
{
    zip.MaxOutputSegmentSize = 819200; // I tried adding this and it did not fix the problem

    foreach (var file in files)
    {
        zip.AddFile(file.FileLocation, file.ZipFileDirectory).FileName = 
            (!string.IsNullOrEmpty(file.ZipFileDirectory) && (file.ZipFileDirectory != @"\")) ? 
                string.Format(@"{0}\{1}", file.ZipFileDirectory, file.FileName) : 
                file.FileName;
    }

    zip.Save(HttpContext.Current.Response.OutputStream);
}

在完成对流的写入后,是否需要刷新流

HttpContext.Current.Response.Flush()

编辑:


调用HttpContext.Current.ApplicationInstance.CompleteRequest()

在完成对流的写入后,是否需要刷新流

HttpContext.Current.Response.Flush()

编辑:


调用HttpContext.Current.ApplicationInstance.CompleteRequest()

这里接受的答案并没有解决我的问题,但是,使用一些注释引导我走上了正确的道路。为我解决这个问题所需要的只是添加

HttpContext.Current.Response.End()


在所有处理完成后(在我的例子中,在代码样本块之后,在使用块之外)。

这里接受的答案并没有解决我的问题,但是,使用一些注释引导我走上了正确的道路。为我解决这个问题所需要的只是添加

HttpContext.Current.Response.End()


在所有处理完成后(在我的情况下,在示例代码块之后,在使用块之外)。

如果直接将zip保存到文件中(不使用
HttpContext.Current.Response
),是否会发生同样的情况?如果直接将zip保存到文件中,是否会发生同样的情况(没有使用
HttpContext.Current.Response
)?.Flush()本身没有帮助,但是,.End()有帮助。我还尝试在.End()之前添加.Flush(),这也很有效。我记得过去使用过.End(),但它引发了异常:System.Threading.ThreadAbortException(现在仍然如此)所以我删除了它,因为没有它它似乎可以正常工作。你知道为什么它需要.End()用于大型存档,而对于较小的存档却可以正常工作吗?如果你编辑你的文章以包含.End(),我会将其标记为答案-非常感谢你能添加的任何其他信息。谢谢。通过System.Web搜索,它看起来像End()如果“处理程序步骤”不可取消(如果处理程序不是IHTTPassynchandler),则引发ThreadAbortException。建议改为使用HttpContext.Current.ApplicationInstance.CompleteRequest()。您能看到这是否有效吗?在我的示例中,HttpContext.Current.Response.End();适用于单文件存档和大文件存档(超过1400个文件)…Flush()本身没有帮助,但是,.End()有帮助。我还尝试在.End()之前添加.Flush(),这也很有效。我记得以前使用过.End(),但它引发了异常:System.Threading.ThreadAbortException(现在仍然如此)所以我删除了它,因为没有它它似乎可以正常工作。你知道为什么它需要.End()用于大型存档,而对于较小的存档却可以正常工作吗?如果你编辑你的文章以包含.End(),我会将其标记为答案-非常感谢你能添加的任何其他信息。谢谢。通过System.Web搜索,它看起来像End()如果“处理程序步骤”不可取消(如果处理程序不是IHTTPassynchandler),则引发ThreadAbortException。建议改为使用HttpContext.Current.ApplicationInstance.CompleteRequest()。您能看到这是否有效吗?在我的示例中,HttpContext.Current.Response.End();适用于单文件存档和大文件存档(超过1400个文件)。