ZipArchive返回空文件夹C# [英] ZipArchive returning Empty Folder C#

查看:75
本文介绍了ZipArchive返回空文件夹C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用ZipArchive为文档列表创建一个压缩文件夹.

I am using ZipArchive to create a zipped folder for a list of documents.

我不知道为什么,当我返回存档文件夹时,它是空的.

I cant figure out why, when I return my archived folder it is empty.

有人在这里看到我在做什么错吗?

Does anyone see what I am doing wrong here?

我的代码如下:

if (files.Count > 1)
{
    var ms = new MemoryStream();
    var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, false);
    foreach (var file in files)
    {
        var entry = zipArchive.CreateEntry(file.UploadFileName, CompressionLevel.Fastest);
        using (var streamWriter = new StreamWriter(entry.Open()))
        {
            Stream strFile = new MemoryStream(file.UploadFileBytesStream);
            streamWriter.Write(strFile);
            strFile.CopyTo(ms);
        }
    }
    return File(ms, System.Net.Mime.MediaTypeNames.Application.Zip, "FinancialActivityReports.zip");
 }

推荐答案

假定文件

public class FileModel {
    public string UploadFileName { get; set; }
    public byte[] UploadFileBytesStream { get; set; }
}

编写了以下帮助程序来创建压缩文件流

The following helper was written to create the stream of the compressed files

public static class FileModelCompression {

    public static Stream Compress(this IEnumerable<FileModel> files) {
        if (files.Any()) {
            var ms = new MemoryStream();
            var archive = new ZipArchive(ms, ZipArchiveMode.Create, false);
            foreach (var file in files) {
                var entry = archive.add(file);
            }
            ms.Position = 0;
            return ms;
        }
        return null;
    }

    private static ZipArchiveEntry add(this ZipArchive archive, FileModel file) {
        var entry = archive.CreateEntry(file.UploadFileName, CompressionLevel.Fastest);
        using (var stream = entry.Open()) {
            stream.Write(file.UploadFileBytesStream, 0, file.UploadFileBytesStream.Length);
            stream.Position = 0;
            stream.Close();
        }
        return entry;
    }
}

您进行编码,假设 files 是从 IEnumerable< FileModel> 派生的,然后将更改为此...

You code, assuming files is derived from IEnumerable<FileModel> will then change to this...

if (files.Count > 1)
{
    var stream = files.Compress();
    return File(stream, System.Net.Mime.MediaTypeNames.Application.Zip, "FinancialActivityReports.zip");
}

这篇关于ZipArchive返回空文件夹C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆