使用 System.IO.Compression 在内存中创建 ZIP 存档:克服无效的 ZIP 错误
尝试在内存中创建 ZIP 存档时使用 MemoryStream 存储内存时,您可能会遇到创建存档但缺少所需内容的问题。出现此问题的原因是需要将最终字节(例如校验和)写入存档才能完成。
要解决此问题,您可以使用以下修改后的代码:
using (var memoryStream = new MemoryStream()) { using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { var demoFile = archive.CreateEntry("foo.txt"); using (var entryStream = demoFile.Open()) using (var streamWriter = new StreamWriter(entryStream)) { streamWriter.Write("Bar!"); } } using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.CopyTo(fileStream); } }
这里的关键区别是 ZipArchive 构造函数中的第三个参数,该参数设置为 true。此参数指示可以在不关闭基础流的情况下处置 ZipArchive。这允许您在创建存档后重用 MemoryStream。
通过使用修改后的代码,即使使用 MemoryStream,您也可以在内存中成功创建具有所需内容的 ZIP 存档。这种灵活性使您可以在各种场景下操作档案,而无需中间文件处理。
以上是如何使用 C# 成功创建内存中 ZIP 存档并避免'无效 ZIP”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!