首页 >后端开发 >C++ >使用 MemoryStream 创建内存中 ZIP 存档时如何避免空条目?

使用 MemoryStream 创建内存中 ZIP 存档时如何避免空条目?

Linda Hamilton
Linda Hamilton原创
2025-01-07 00:13:501040浏览

How to Avoid Empty Entries When Creating an In-Memory ZIP Archive with MemoryStream?

使用 MemoryStream 在内存中创建 ZIP 存档:克服空条目问题

尝试使用 MemoryStream 在内存中创建 ZIP 存档时开发人员遇到了一个特殊的问题:即使写入了相应的文本文件,创建的存档仍包含一个空文件。此行为归因于过程中缺少一个步骤。

要解决此问题,关键是在尝试访问其底层流之前对 ZipArchive 对象调用 Dispose。这种做法是必要的,因为 ZipArchive 将最终字节写入存档的校验和,使其完整。但是,如果我们希望流保持打开状态以供进一步使用,则需要将 true 作为第三个参数传递给 ZipArchive。

以下是包含此解决方案的修订后的代码片段:

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);
    }
}

通过遵循这种方法,开发人员可以使用 MemoryStream 在内存中成功创建完整的 ZIP 存档,而不会遇到空条目的问题。

以上是使用 MemoryStream 创建内存中 ZIP 存档时如何避免空条目?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn