Day*_*yan 6 .net c# compression asp.net file
我正在尝试将两个文本文件压缩为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();
}
Run Code Online (Sandbox Code Playgroud)
这就是我的压缩方法的样子:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种方法中,完美地创建了zip文件夹.但问题是我在zip文件夹中只得到一个文件(只有第二个文件将在zip文件夹中创建).没有发现错误.
问题:如何将两个文本文件压缩到zip文件夹中?
先谢谢你!
Phi*_*oss 11
您的代码实际上是将两个单独的zip存档保存到zip.zip
文件中(ZipArchive
为每个要压缩的文件创建一个新的).第一个zip存档仅包含,仅包含file1.txt
第二个file2.txt
.zip.zip
在Windows资源管理器中打开时,它只显示第二个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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
乍一看,我建议你foreach
围绕这个说法using var (archive = new ZipArchive...)
是错误的.
这样,ZipArchive
每次迭代foreach
循环时都会创建一个新的.
当然你想创建ZipArchive
和循环foreach
内部的那个?
像这样:
private void CompressToZip(string fileName, Dictionary<string, byte[]> fileList)
{
using (var memoryStream = new MemoryStream())
{
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);
}
}
}
using (var fileStream = new FileStream(fileName, FileMode.Create))
{
memoryStream.Seek(0, SeekOrigin.Begin);
memoryStream.CopyTo(fileStream);
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
归档时间: |
|
查看次数: |
12254 次 |
最近记录: |