[英]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
了。
當您將模式設置為更新時,底層文件或流必須支持讀取、寫入和查找。 整個存檔的內容保存在內存中,在存檔被釋放之前,不會將數據寫入底層文件或流。
似乎您需要在處理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.