使用Ionic Zip将zip文件夹中的文件夹提取到另一个目录的根目录(zip中没有包含的文件夹)

时间:2013-11-12 18:24:05

标签: zip extract root subdirectory

我试图让Ionic zip将zip文件中的文件夹解压缩到指定的根目录中。我的问题是里面的zip文件是“zipfile.zip \ some_folder \”。我想将“some_folder”中的所有文件提取到另一个目录根目录。

继承人我做了什么

using (ZipFile zip = ZipFile.Read("zipfile.zip"))
{
var selection = (from cf in zip.Entries
                 where (cf.FileName).StartsWith("some_folder/")
                 select cf);

foreach (var cf in selection)
    {
    try
        {
            cf.Extract(destinationPath, ExtractExistingFileAction.OverwriteSilently);
            progress.Value = progress.Value + 1;
        }
        catch (Exception ex)
        {
            installProblems = true;
        }

    }
}

上面代码的问题是它将自己的文件夹也提取到“destinationPath \ some_folder”中。我希望在“destinationPath”中提取“zipfile.zip \ some_folder \”中的文件

希望你能提供帮助!

编辑:

所以我尝试了一些东西,并想出了一些有用的东西,但我不喜欢它:

using (ZipFile zip = ZipFile.Read("zipfile.zip"))
{
    var selection = (from cf in zip.Entries
                                 where (cf.FileName).StartsWith("some_folder/")
                                 select cf);

    selection.ToList().ForEach(entry =>
    {
        try
        {
            entry.FileName = entry.FileName.Substring(12);
            entry.Extract(minecraftPathVar, ExtractExistingFileAction.OverwriteSilently);
        }
        catch
        {
            installProblems = true;
        }

    });
}

上述作品,但我不相信它是一个很好的做法,即使名称“some_folder”在任何时候都没有改变,我只是不喜欢这种方法..

1 个答案:

答案 0 :(得分:3)

在第一行之后:使用(ZipFile zip = ZipFile.Read(“zipfile.zip”))

尝试这样做: zip.FlattenFoldersOnExtract = true