1

DotNetZipを使用して1つ以上のファイルを圧縮する方法がありますが、正しく機能しています。本日初めてエラーが発生しましたが、アーカイブの合計サイズに関係しているようです。同じ60mb.tiffイメージを使用して、コピーをいくつか追加し、テストして、繰り返します。約10枚の画像が追加されるまでは正常に機能しましたが、WinRarを使用してZipファイルを開くと、「予期しないアーカイブの終了」エラーが発生しました。この方法でテストすることで、コードまたはファイルに関連する問題(破損など)を除外できたと思います。コードはエラーではなく、WinRarのみがエラーになります。Zipファイルを開くと、サイズが「0」のファイルが1つだけ表示されます。そのため、ある種のサイズ制限に達しているようで、アーカイブを作成できません。どちらの限界かわかりません。

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);
}
4

2 に答える 2

3

ここで受け入れられた答えは私にとって問題を解決しませんでしたが、いくつかのコメントを採用することで正しい道をたどることができました。これを解決するために必要だったのは、単純に追加することでした

HttpContext.Current.Response.End();

すべての処理が完了した後 (私の場合、コードのサンプル ブロックの直後、using ブロックの外側)。

于 2014-10-15T18:59:53.523 に答える
2

ストリームへの書き込みが完了したら、ストリームをフラッシュする必要がありますか?

HttpContext.Current.Response.Flush();

編集:

HttpContext.Current.ApplicationInstance.CompleteRequest() を呼び出す

于 2012-02-27T19:23:54.987 に答える