【问题标题】:ExtractToDirectory , how to extract a zip folder within a zip folder using c#ExtractToDirectory ,如何使用 c# 在 zip 文件夹中提取 zip 文件夹
【发布时间】:2020-09-03 20:57:21
【问题描述】:

问题:我有这段代码可以提取指定目录中的所有 .zip 文件夹。现在我的问题是我的 .zip 文件在其中包含另一个 .zip 文件。我的程序的输出是它为提取的 zip 文件创建一个文件夹,其命名结构类似于 NUMBER_ + ZipFileName ,现在当我打开该文件夹时,它仍然包含一个 .zip 文件夹。如何在同一 NUMBER_ + ZipFileName 文件夹上的 zip 文件夹中提取 zip 文件夹?这让我有点困惑。

所需的文件结构

Temp -> number_zipfilename-> [在此处提取的文件 w/o .zip]

number_zipfilename2 -> [此处没有 .zip 的提取文件]

.....

我的脚本文件结构的输出

Temp -> number_zipfilename -> [提取的文件,但带有 .zip ]

number_zipfilename -> [提取的文件,但带有 .zip ]

尝试了递归建议,但它在我的内部创建了另一个文件夹 number_zipfilename 文件夹和 .zip 文件仍在该文件夹内。

这是我的任务要求,有点难掌握。

这是我的脚本

public void extractZipFiles(string targetFileDirectory, string zipFileDirectory, string Number)
{
            Directory.GetFiles(zipFileDirectory, "*.zip", SearchOption.AllDirectories).ToList()
            .ForEach(zipFilePath => {
                var test = Number + "_" + Path.GetFileNameWithoutExtension(zipFilePath);
                var extractPathForCurrentZip = Path.Combine(targetFileDirectory, test);
                if(!Directory.Exists(extractPathForCurrentZip))
                {
                    Directory.CreateDirectory(extractPathForCurrentZip);
                }
                ZipFile.ExtractToDirectory(zipFilePath, extractPathForCurrentZip);
            });
}

【问题讨论】:

  • 你想递归解压吗?就像...为每个解压缩的 zip 文件再次调用您的例程? ...哦,顺便说一句...您知道 42.zip 吗?它是一个 42KB 的 zip 文件,其中包含 zip 文件,如果递归解压缩,它会扩展至大约 4.5 PB...en.wikipedia.org/wiki/Zip_bomb
  • @DarkSquirrel42 感谢您的提醒!不过,此试用版仅包含 .zip 文件,再次感谢! :)

标签: c# zip extract unzip extraction


【解决方案1】:

根据我在您的代码中看到的内容,我认为您应该递归调用extractZipFiles 方法,以便在提取后再次使用提取文件的目录调用该方法,以便扫描*.zip文件。

我不确定您要使用哪些变量,但类似这样:

public void extractZipFiles(string targetFileDirectory, string zipFileDirectory, string Number)
{
            Directory.GetFiles(zipFileDirectory, "*.zip", SearchOption.AllDirectories).ToList()
            .ForEach(zipFilePath => {
                var test = Number + "_" + Path.GetFileNameWithoutExtension(zipFilePath);
                var extractPathForCurrentZip = Path.Combine(targetFileDirectory, test);
                if(!Directory.Exists(extractPathForCurrentZip))
                {
                    Directory.CreateDirectory(extractPathForCurrentZip);
                }
                ZipFile.ExtractToDirectory(zipFilePath, extractPathForCurrentZip);
                extractZipFiles(targetFileDirectory, extractPathForCurrentZip, Number);
            });
}

【讨论】:

  • 成功了!但如果可能的话,我怎样才能编辑我的代码,以便能够将 zip 保存在我的 zip 文件中,就在文件夹中?递归执行将为里面的 zip 文件夹创建另一个文件夹,我想要 1 个文件夹中的所有文件......带有 Number_ + 文件名。太感谢了!!我想我需要修改我的方法的代码才能使它起作用。
  • 我刚刚编辑了我的代码,更改了第一个参数(我认为可以这样做)。希望对您有所帮助!
  • 感谢兄弟的帮助!并意识到我需要做些什么才能达到我的编程目标。 :) 帮助很大。
  • @kebbg 不错!如果您认为这回答了您的问题,请您接受我的回答吗?很高兴它有帮助!
  • 你的建议已经完成了一半,但我仍然没有达到我想要的输出:(尽管 devcrp 先生,我赞成你的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2016-10-30
  • 2023-03-24
相关资源
最近更新 更多