C# Create ZIP Archive with multiple files

.net, c#, compression, zip

Solution

You are creating `ZipArchive` on each iteration. Swapping `foreach` and `using` should solve it:

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

Problem

I'm trying to create a ZIP archive with multiple text files as follows: ``` 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); } } ``` However, the ZIP is created with only the last text file, what's wrong?

Original source