c# - 如何在 Azure Blob 存储中解压自解压 Zip 文件?

标签 c# azure 7zip self-extracting pkzip

我有一个 zip 文件(.Exe - 自解压 zip 文件),可以使用 7zip 解压。由于我想自动化提取过程,因此我使用了以下 C# 代码。它适用于普通的 7z 文件。但当我尝试提取特定的自解压 (.Exe) zip 文件时,面临“无法访问关闭的流”这个问题。供引用。我手动确保 7zip 命令行版本正在解压缩文件。

using (SevenZipExtractor extract = new SevenZipExtractor(zipFileMemoryStream))
    {
        foreach (ArchiveFileInfo archiveFileInfo in extract.ArchiveFileData)
        {
            if (!archiveFileInfo.IsDirectory)
            {
                using (var memory = new MemoryStream())
                {
                    string shortFileName = Path.GetFileName(archiveFileInfo.FileName);
                    extract.ExtractFile(archiveFileInfo.Index, memory);
                    byte[] content = memory.ToArray();
                    file = new MemoryStream(content);
                }
            }
        }
    }

该 zip 文件位于 Azure Blob 存储中。我不知道如何获取 Blob 存储中提取的文件。

最佳答案

这是对我有用的解决方法之一。我没有使用 7Zip,而是使用了 ZipArchive。

ZipArchive archive = new ZipArchive(myBlob);
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(destinationStorage);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(destinationContainer);

foreach(ZipArchiveEntry entry in archive.Entries) {
  log.LogInformation($"Now processing {entry.FullName}");

  string valideName = Regex.Replace(entry.Name, @ "[^a-zA-Z0-9\-]", "-").ToLower();

  CloudBlockBlob blockBlob = container.GetBlockBlobReference(valideName);
  using(var fileStream = entry.Open()) {
    await blockBlob.UploadFromStreamAsync(fileStream);
  }
}

引用: How to Unzip Automatically your Files with Azure Function v2

关于c# - 如何在 Azure Blob 存储中解压自解压 Zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70836475/

相关文章:

c# - 可移植图书馆中的计时器

c# - 在 MVC4 中设置默认 Controller

c# - 使用 C# HttpClient 登录 Salesforce

c++ - 如何使用 7z SDK 提取 rar/zip 文件 (C++)?

zip - 如何在没有目录的情况下提取 7-zip zip 文件

索引器的c#程序

azure - 将同一文件同时上传到 Azure Blob 存储

node.js - Bower 在 Azure 部署上失败

java - 以编程方式从 7zip 存档中提取单个特定文件 - Java - Linux

Azure Cosmos DB 显示错误的 LONG 值