繁体   English   中英

在 C# 中获取 ZipArchive 的字节数组

[英]Get byte array for ZipArchive in C#

我正在尝试编写代码以从 zip 存档中删除_MAXOSX文件夹(如果存在,则进一步中断验证)。

代码必须返回一个byte[]而不是 ZipArchive 本身。 我目前拥有的代码是:

var fileBytes = uploadController.FileBytes;
if (stripMacOSXFolder && uploadController.FileName.EndsWith(".zip", StringComparison.CurrentCultureIgnoreCase))
{
    try
    {
        using (var data = new MemoryStream(fileBytes))
        using (var archive = new ZipArchive(data, ZipArchiveMode.Update))
        {
            var osx = archive.Entries.SingleOrDefault(c =>
                c.FullName.Equals("__MACOSX/", StringComparison.CurrentCultureIgnoreCase));
            if (osx != null)
            {
                osx.Delete();
                // SET fileBytes to archive byte[]
            }
        }
    }
    catch (Exception)
    {
        return new ObjectReturnMethodResult<UploadedFileV2>("Uploaded zip appears to be invalid.");
    }
}

一旦我删除了如何将fileBytes设置为更新后的 ZipArchive 的字节数组的条目,我就fileBytes了。

Update模式状态的文档

当您将模式设置为更新时,底层文件或流必须支持读取、写入和查找。 整个存档的内容保存在内存中,在存档被释放之前,不会将数据写入底层文件或流。

似乎您需要在处理ZipArchive后获取更新字节:

using (var data = new MemoryStream(fileBytes))
{
    using (var archive = new ZipArchive(data, ZipArchiveMode.Update))
    {
        var osx = archive.Entries.SingleOrDefault(c =>
            c.FullName.Equals("__MACOSX/", StringComparison.CurrentCultureIgnoreCase));
        if (osx != null)
        {
            osx.Delete();
        }
    }
    fileBytes = data.ToArray();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM