ExtractToDirectory,如何使用 c# 在 zip 文件夹中提取 zip 文件夹

ExtractToDirectory , how to extract a zip folder within a zip folder using c#

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

想要的文件结构

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

number_zipfilename2 -> [此处提取文件 w/o .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);
            });
}

根据我在您的代码中看到的内容,我认为您应该递归调用 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);
            });
}