C# 创建包含多个文件的 ZIP 存档
本文关键字:ZIP 存档 文件 创建 包含多 | 更新日期: 2023-09-27 18:31:34
我正在尝试创建一个包含多个文本文件的 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
和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);
}
}
每次运行foreach循环时,它都会将ZipArchiveMode作为Create。这应该是问题所在,因此它每次都会生成带有新内容的新zip,例如最后一个文本文件。为应该解决的第一个循环运行之后的每个循环运行创建一个异常。