Roszadok Ответов: 1

Можно ли вообще заархивировать более 65535 динамических файлов с помощью sharpziplib ?


Я пытаюсь zip 100 000 динамических файлов, и в консольном приложении я могу сделать это без каких-либо проблем, но в веб-приложении кажется, что это в некотором роде невозможно для моего текущего уровня знаний. Я хотел бы знать, действительно ли это невозможно ?

До сих пор zip, сделанный на webapp, который больше, чем 65535 файлов, выходит из строя при открытии.

Что я уже пробовал:

Я сделал это тестовое приложение, но не смог найти ответа.

приставка

static void Main(string[] args)
{
    using (ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create("Test.zip")))
    {
        zipOutputStream.SetLevel(0);
        for (long i = 1; i < 100000; i++)
        {
            string txt = "File " + i.ToString();
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(txt);
            using (MemoryStream ms = new MemoryStream(bytes))
            {
                ZipEntry entry =
                    new ZipEntry(ZipEntry.CleanName(i.ToString() + ".txt"))
                    {
                        DateTime = DateTime.Now,
                        CompressionMethod = CompressionMethod.Stored,
                        Size = bytes.Length
                    };
                zipOutputStream.PutNextEntry(entry);
                byte[] buffer = new byte[1024];
                ICSharpCode.SharpZipLib.Core.StreamUtils.Copy(ms, zipOutputStream, buffer);
                Console.WriteLine(i.ToString());
            }
        }
    }
}


сеть

protected void Page_Load(object sender, EventArgs e)
{
    Response.Clear();
    Response.ClearHeaders();
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + "file.zip");

    using (ZipOutputStream zipOutputStream = new ZipOutputStream(Response.OutputStream))
    {
        zipOutputStream.SetLevel(0);
        for (long i = 1; i < 100000; i++)
        {
            string txt = "File " + i.ToString();
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(txt);
            using (MemoryStream ms = new MemoryStream(bytes))
            {
                ZipEntry entry =
                    new ZipEntry(ZipEntry.CleanName(i.ToString() + ".txt"))
                    {
                        DateTime = DateTime.Now,
                        CompressionMethod = CompressionMethod.Stored,
                        Size = bytes.Length
                    };
                zipOutputStream.PutNextEntry(entry);
                byte[] buffer = new byte[1024];
                ICSharpCode.SharpZipLib.Core.StreamUtils.Copy(ms, zipOutputStream, buffer);
                Response.Flush();
            }
        }
    }
    Response.Flush();
    Response.End();
}

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Нет, это невозможно. Это заняло у меня около 10 секунд, чтобы погуглить.

Попробуйте вместо этого DotNetZip.


Roszadok

Это тоже невозможно.
С уважением.

Dave Kreskowiak

Вау. Хороший нисходящий голос без всякой причины. Я сказал, Попробуй. Я не говорил, что это сработает.