【问题标题】:C# Create ZIP Archive with multiple filesC# 创建包含多个文件的 ZIP 存档
【发布时间】:2015-01-21 18:42:48
【问题描述】:

我正在尝试创建一个包含多个文本文件的 ZIP 存档,如下所示:

Dictionary<string, string> Values = new Dictionary<string, string>();
using (var memoryStream = new MemoryStream())
{
    string zip = @"C:\Temp\ZipFile.zip";
    foreach (var item in Values)
    {
        using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
        {
            var file = archive.CreateEntry(item.Key + ".txt");
            using (var entryStream = file.Open())
            using (var streamWriter = new StreamWriter(entryStream))
            {
                streamWriter.Write(item.Value);
            }
        }
    }
    using (var fileStream = new FileStream(zip, FileMode.Create))
    {
        memoryStream.Seek(0, SeekOrigin.Begin);
        memoryStream.CopyTo(fileStream);
    }
}

但是,ZIP 仅使用最后一个文本文件创建,有什么问题?

【问题讨论】:

    标签: c# .net zip compression


    【解决方案1】:

    您在每次迭代中创建ZipArchive。交换foreachusing 应该可以解决它:

    Dictionary<string, string> Values = new Dictionary<string, string>();
    using (var memoryStream = new MemoryStream())
    {
        string zip = @"C:\Temp\ZipFile.zip";
        using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
        {
            foreach (var item in Values)
            {
                var file = archive.CreateEntry(item.Key + ".txt");
                using (var entryStream = file.Open())
                using (var streamWriter = new StreamWriter(entryStream))
                {
                    streamWriter.Write(item.Value);
                }
            }
        }
    
        using (var fileStream = new FileStream(zip, FileMode.Create))
        {
            memoryStream.Seek(0, SeekOrigin.Begin);
            memoryStream.CopyTo(fileStream);
        }
    }
    

    【讨论】:

      【解决方案2】:

      您的 foreach 循环每次运行时都会将 ZipArchiveMode 设置为 Create。这应该是问题所在,因此它每次都会生成新的 zip,其中包含新内容,例如最后一个文本文件。为应该解决的第一个循环之后的每个循环创建一个异常。

      【讨论】:

        猜你喜欢
        • 2017-02-07
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多