c# - C# 使用 zip 归档 System.IO.Compression 创建 zip 文件
问题描述
这是我想要实现的功能
- 编写一个 JSON 文件。
- 编写一个 PDF 文件。
- 为这两个文件创建一个存档
我正在使用 System.IO.Compression ZipArchive来实现这一点。从文档中,我没有找到一个好的用例。文档中的示例假定 zip 文件存在。
我想要做什么创建 zipArchive 流将 JSON 文件和 pdf 文件作为 zip 文件中的条目写入。
using (var stream = new FileStream(path, FileMode.Create))
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
ZipArchiveEntry manifest = archive.CreateEntry(filenameManifest);
using (StreamWriter writerManifest = new StreamWriter(manifest.Open()))
{
writerManifest.WriteLine(JSONObject_String);
}
ZipArchiveEntry pdfFile = archive.CreateEntry(filenameManifest);
using (StreamWriter writerPDF = new StreamWriter(pdfFile.Open()))
{
writerPDF.WriteLine(pdf);
}
}
}
解决方案
你不关闭stream
,你用' manifest.Open()
'打开。那么它可能没有将所有内容都写入 zip。
将其包裹在另一个中using
,如下所示:
using (var stream = new FileStream(path, FileMode.Create))
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
ZipArchiveEntry manifest = archive.CreateEntry(filenameManifest);
using (Stream st = manifest.Open())
{
using (StreamWriter writerManifest = new StreamWriter(st))
{
writerManifest.WriteLine(JSONObject_String);
}
}
ZipArchiveEntry pdfFile = archive.CreateEntry(filenameManifest);
using (Stream st = manifest.Open())
{
using (StreamWriter writerPDF = new StreamWriter(st))
{
writerPDF.WriteLine(pdf);
}
}
}
}
推荐阅读
- apache-spark - Spark Driver 内存计算
- c# - C# TFS SDK 从变更集中获取项目
- azure-cosmosdb - 我们可以在 azure cosmos DB 中使用非主键作为分区键吗?
- ios - 为什么 dlopen() 总是返回我找不到图像?
- javascript - 在 Node.JS 中将标头发送到客户端后无法设置标头
- java - 显示 Activity 后的 Android BlackScreen 布局
- jquery - 试图通过控制台勾选页面上的所有复选框
- javascript - 未捕获的 ReferenceError:Web 开发人员工具中未定义要求
- javascript - 错误放置在 Jquery 验证插件的选择标记顶部
- drop-down-menu - yii2 下拉列表值