我正在尝试将两个文本文件压缩为zip文件。这就是我的公共方法的样子:
public ActionResult Index()
{
byte[] file1 = System.IO.File.ReadAllBytes(@"C:\file1.txt");
byte[] file2 = System.IO.File.ReadAllBytes(@"C:\file2.txt");
Dictionary<string, byte[]> fileList = new Dictionary<string, byte[]>();
fileList.Add("file1.txt", file1);
fileList.Add("file2.txt", file2);
CompressToZip("zip.zip", fileList);
return View();
}
这就是我的压缩方法的样子:
private void CompressToZip(string fileName, Dictionary<string, byte[]> fileList)
{
using (var memoryStream = new MemoryStream())
{
foreach (var file in fileList)
{
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
var demoFile = archive.CreateEntry(file.Key);
using (var entryStream = demoFile.Open())
using (var b = new BinaryWriter(entryStream))
{
b.Write(file.Value);
}
}
}
using (var fileStream = new FileStream(fileName, FileMode.Create))
{
memoryStream.Seek(0, SeekOrigin.Begin);
memoryStream.CopyTo(fileStream);
}
}
}
在这种方法中,完美地创建了zip文件夹。但问题是我在zip文件夹中只得到一个文件(只有第二个文件将在zip文件夹中创建)。 没有发现错误。
问题:如何将两个文本文件压缩到zip文件夹中?
先谢谢你了!
答案 0 :(得分:10)
您的代码实际上将两个单独的zip存档保存到zip.zip
文件(为每个要压缩的文件创建一个新的ZipArchive
)。第一个zip存档仅包含file1.txt
,仅包含file2.txt
。在Windows资源管理器中打开zip.zip
时,它只显示第二个zip存档的内容。
要创建包含这两个文件的单个zip存档,只需在ZipArchive
循环之外移动fileList
的创建:
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach (var file in fileList)
{
var demoFile = archive.CreateEntry(file.Key);
using (var entryStream = demoFile.Open())
using (var b = new BinaryWriter(entryStream))
{
b.Write(file.Value);
}
}
}
答案 1 :(得分:6)
乍一看,我建议围绕AudioConverterFillComplexBuffer(audioConverterRef, AudioConverter_Callback, &convertInfo, &framesToDecode, &localPcmBufferList, nil)
的{{1}}陈述是错误的。
这样,每次迭代foreach
循环时都会创建一个新的using var (archive = new ZipArchive...)
。
当然,您想创建ZipArchive
并循环浏览
foreach
吗?
像这样:
ZipArchive
希望这有帮助!
答案 2 :(得分:0)
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(startPath, zipPath);