C# 创建包含多个文件的 ZIP 存档

2024-06-19

我正在尝试创建包含多个文本文件的 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 是仅使用最后一个文本文件创建的,有什么问题吗?


你正在创造ZipArchive在每次迭代中。交换foreach and using应该解决它:

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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 创建包含多个文件的 ZIP 存档 的相关文章

随机推荐