如何使用SharpZipLib从zip文件中提取文件夹

本文关键字:提取 文件夹 文件 zip 何使用 SharpZipLib | 更新日期: 2023-09-27 17:50:28

我有一个test.zip文件,它包含在一个文件夹中有一堆其他文件和文件夹。

我发现SharpZipLib后,弄清楚。gz/GzipStream不是去的方式,因为它只适用于单个文件。更重要的是,这样做类似于使用GZipStream,这意味着它将创建一个文件。但我已经压缩了整个文件夹。如何解压缩到

由于某些原因,这里的解压缩示例被设置为忽略目录,所以我不完全确定这是如何完成的。

另外,我需要使用。net 2.0来完成这个。

如何使用SharpZipLib从zip文件中提取文件夹

我认为这是更简单的方法。默认功能(请查看此处获取更多信息https://github.com/icsharpcode/SharpZipLib/wiki/FastZip)

it extract with folders.

代码:

using System;
using ICSharpCode.SharpZipLib.Zip;
var zipFileName = @"T:'Temp'Libs'SharpZipLib_0860_Bin.zip";
var targetDir = @"T:'Temp'Libs'unpack";
FastZip fastZip = new FastZip();
string fileFilter = null;
// Will always overwrite if target filenames already exist
fastZip.ExtractZip(zipFileName, targetDir, fileFilter);

我是这样做的:

public void UnZipp(string srcDirPath, string destDirPath)
{
        ZipInputStream zipIn = null;
        FileStream streamWriter = null;
        try
        {
            Directory.CreateDirectory(Path.GetDirectoryName(destDirPath));
            zipIn = new ZipInputStream(File.OpenRead(srcDirPath));
            ZipEntry entry;
            while ((entry = zipIn.GetNextEntry()) != null)
            {
                string dirPath = Path.GetDirectoryName(destDirPath + entry.Name);
                if (!Directory.Exists(dirPath))
                {
                    Directory.CreateDirectory(dirPath);
                }
                if (!entry.IsDirectory)
                {
                    streamWriter = File.Create(destDirPath + entry.Name);
                    int size = 2048;
                    byte[] buffer = new byte[size];
                    while ((size = zipIn.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        streamWriter.Write(buffer, 0, size);
                    }
                }
                streamWriter.Close();
            }
        }
        catch (System.Threading.ThreadAbortException lException)
        {
            // do nothing
        }
        catch (Exception ex)
        {
            throw (ex);
        }
        finally
        {
            if (zipIn != null)
            {
                zipIn.Close();
            }
            if (streamWriter != null)
            {
                streamWriter.Close();
            }
        }
    }

这是草率的,但我希望它有助于!