ZipArchive返回空文件夹C#

时间:2016-04-21 17:32:47

标签: c# asp.net ziparchive

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

我无法弄清楚为什么,当我退回归档文件夹时,它是空的。

有谁看到我在这里做错了什么?

我的代码如下:

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

1 个答案:

答案 0 :(得分:1)

假设file

的以下模型
public class FileModel {
    public string UploadFileName { get; set; }
    public byte[] UploadFileBytesStream { get; set; }
}

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

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>,则会更改为此...

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