【发布时间】:2013-03-28 03:17:21
【问题描述】:
我有一个 MyFile.zip,它有一个主目录“MyMainFolder”,其中有几个子目录,我想提取其中一个 (MySubFolder)...及其所有子目录和内容。
我正在尝试弄清楚如何“进入” MyMainFolder ,以便提取“MySubFolder”。
我有一些代码可以提取一个文件夹,只要我要查找的文件夹作为 zip 中的主文件夹存在……我可以检测主文件夹是否称为“MyMainFolder”,因此它知道要查找在里面并从那里提取,而不是在主 zip 根目录中查找 MySubFolder)。
using (ZipFile zip1 = ZipFile.Read(fileName))
{
zipFile = ZipFile.Read(@""+fileName);
var result = zipFile.Any(entry => entry.FileName.Contains("MySubFolder"));
if (result == false)
{
MessageBox.Show("MyMainFolder detected....Extracting from MyMainFolder...");
// something here that will extract JUST MySubFolder and contents
} else {
foreach (var e in selection)
{
var selection = (from e in zip1.Entries where (e.FileName).Contains("NySubfolder") select e)
e.Extract(outputDirectory);
}
}
}
到目前为止,我已经尝试在 if-else 的每个部分中放置一个单独的 using,并尝试创建一个单独的 selectionX,在其中我尝试强制使用根文件夹名称(对于这个来说,它始终是 'MyMainFolder'实验)成为它所浏览的一部分,认为我可以提取 MySubFolder,但我也无法让它工作。我尝试合并我在 stackflow 和 elsehwere 上找到的其他几种方法,例如使用“如何提取文件,但忽略 zipfile 中的路径”和其他此类帖子的部分内容来尝试找到一种“跳过”主根目录的方法解压时的文件夹。 (以便它只获取“MySubFolder”(和内容)并提取到 outputDirectory(不是 MyMainFolder\MySubFolder...)
感谢任何帮助。 谢谢!!
【问题讨论】:
-
是的..这就是我得到上面代码的地方。我添加了 if-else。
-
仍在处理这个...如果它位于 zip 文件的根目录中,我可以“检测”是否存在“MyMainFolder”,但不能检测到“MySubFolder”存在于“ MyMainFolder'... 更不用说在不提取 MyMainFolder 的情况下提取 MySubFolder。
-
CodePlex 的 Cheeso 告诉我,无法直接执行此操作,最好的解决方法是枚举整个内容,直到找到我要查找的内容然后提取它。我很确定我已经看到了通过文件枚举并仅提取我需要的内容的方法示例,所以我会尝试一下。
标签: c# extract subdirectory dotnetzip