如何向归档文件中添加二进制文件(以PDF为例)
处理二进制文件(如PDF)添加到Zip归档的方法
其实处理PDF这类二进制文件和文本文件的核心逻辑大同小异,只是不需要用专门处理字符流的StreamWriter,直接操作字节流复制原始文件内容就可以了——毕竟二进制文件不需要做字符编码转换,按字节原样写入就行。
你可以参考下面的修改后的代码,这是针对PDF文件的实现:
using System.IO; using System.IO.Compression; // 注意:需要引用System.IO.Compression和System.IO.Compression.FileSystem命名空间 using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuse\release.zip", FileMode.Open)) { using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) { // 创建归档中的PDF条目,第二个参数可选,用来指定压缩级别 ZipArchiveEntry pdfEntry = archive.CreateEntry("document.pdf", CompressionLevel.Optimal); // 打开本地要添加的PDF文件(只读模式) using (FileStream sourcePdfStream = new FileStream(@"c:\users\exampleuse\document.pdf", FileMode.Open, FileAccess.Read)) // 打开归档条目的写入流 using (Stream entryWriteStream = pdfEntry.Open()) { // 直接把源文件的字节流复制到归档流中 sourcePdfStream.CopyTo(entryWriteStream); } } }
几个关键注意点:
- 压缩级别:
CreateEntry的第二个参数可以选CompressionLevel.Optimal(平衡压缩率和速度)、Fastest(优先速度)或者NoCompression(不压缩),根据你的需求选择就好 - 流的处理:所有流都用
using语句包裹,确保操作完成后自动释放资源,避免文件被锁定的问题 - 通用性:这个方法不止适用于PDF,所有二进制文件(比如图片、exe、压缩包等)都可以用这个方式添加到Zip归档里,逻辑完全一致
内容的提问来源于stack exchange,提问作者anjulis
相关产品推荐
相关产品推荐

