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

时间:2014-03-16 22:11:48

标签: c# .net zip directory compression

我有一个test.zip文件,其中包含一个文件夹,其中包含许多其他文件和文件夹。

我找到SharpZipLib后发现.gz / GzipStream不是那种方法,因为它只针对单个文件。更重要的是,这样做与使用GZipStream类似,这意味着它将创建一个文件。但我有整个文件夹压缩。如何解压缩到

出于某种原因,此处example unzipping设置为忽略目录,因此我不完全确定如何完成。

另外,我需要使用.NET 2.0来实现这一目标。

3 个答案:

答案 0 :(得分:24)

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

用文件夹提取。

代码:

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);

答案 1 :(得分:1)

此链接准确说明了您需要实现的目标:

http://community.sharpdevelop.net/forums/p/6873/23543.aspx

答案 2 :(得分:0)

我就这样做了:

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();
            }
        }
    }

这很草率,但我希望它有所帮助!