【问题标题】:How do I extract a SubDirectory using C# DotNetZip?如何使用 C# DotNetZip 提取子目录?
【发布时间】: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


【解决方案1】:

枚举整个内容,直到我找到我正在寻找的工作,但作为一个实验,我想看看它是否可以用另一种方式完成。

由于我无法检查根文件夹中子文件夹的名称,我想我可以在解析它时匹配我正在寻找的内容,只提取我想要的内容,然后只需更改输出路径。

using (ZipFile zip1 = ZipFile.Read(fileName))
{
    zipFile = ZipFile.Read(@""+fileName);
    var result = zipFile.Any(entry => entry.FileName.Contains("MySubFolder"));

    if (result == false)
    {
        // something here that will extract JUST MySubFolder and content
        string TestX = Path.GetDirectoryName(e.FileName) ;
        string MyNewPath = outputDirectory+@"\"+TestX ;
        e.Extract(MyNewPath);
    } else {
        foreach (var e in selection)
   {             
        var selection = (from e in zip1.Entries where (e.FileName).Contains("MySubfolder")
        .select e)               
        e.Extract(outputDirectory);        
   }
}

类似的东西.. 不是很有用,但很有趣,帮助我学到了一点。 (如果没有别的,一个如何不做事的例子......呵呵) 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多