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?