簡體   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