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

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

Linda Hamilton
发布: 2025-01-07 00:13:50
原创
966 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板