DotNetZip: How to extract files, but ignoring the path in the zipfile?

后端 未结 4 1675
借酒劲吻你
借酒劲吻你 2021-02-14 03:33

Trying to extract files to a given folder ignoring the path in the zipfile but there doesn\'t seem to be a way.

This seems a fairly basic requirement given all the other

相关标签:
4条回答
  • 2021-02-14 03:45

    That will fail if there are 2 files with equal filenames. For example files\additionalfiles\file1.txt temp\file1.txt

    First file will be renamed to file1.txt in the zip file and when the second file is trying to be renamed an exception is thrown saying that an item with the same key already exists

    0 讨论(0)
  • 2021-02-14 03:53

    You can use the overload that takes a stream as a parameter. In this way you have full control of path where the files will be extracted to.

    Example:

    using (ZipFile zip = new ZipFile(ZipPath))
    {
         foreach (ZipEntry e in zip)
         {
            string newPath = Path.Combine(FolderToExtractTo, e.FileName);
    
            if (e.IsDirectory)
            {
               Directory.CreateDirectory(newPath);
            }
            else
            {
              using (FileStream stream = new FileStream(newPath, FileMode.Create))
                 e.Extract(stream);
            }
         }
    }
    
    0 讨论(0)
  • 2021-02-14 03:55

    While you can't specify it for a specific call to Extract() or ExtractAll(), the ZipFile class has a FlattenFoldersOnExtract field. When set to true, it flattens all the extracted files into one folder:

    var flattenFoldersOnExtract = zip.FlattenFoldersOnExtract;
    zip.FlattenFoldersOnExtract = true;
    zip.ExtractAll();
    zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
    
    0 讨论(0)
  • 2021-02-14 03:58

    You'll need to remove the directory part of the filename just prior to unzipping...

    using (var zf = Ionic.Zip.ZipFile.Read(zipPath))
    {
        zf.ToList().ForEach(entry =>
        {
            entry.FileName = System.IO.Path.GetFileName(entry.FileName);
            entry.Extract(appPath);
        });
    }
    
    0 讨论(0)
提交回复
热议问题