web-dev-qa-db-ja.com

SharpZipLibを使用してZipファイルからフォルダを抽出するにはどうすればよいですか?

私はtest.Zip他のファイルやフォルダがたくさんあるフォルダ内に含まれるファイル。

SharpZipLib .gz/GzipStreamは個々のファイル専用であるため、移動する方法ではないことがわかりました。さらに重要なことに、これを行うことは、 GZipStream を使用することに似ています。つまり、ファイルが作成されます。しかし、フォルダ全体を圧縮しました。に解凍するにはどうすればよいですか

なんらかの理由で 例の解凍 ここではディレクトリを無視するように設定されているので、それがどのように行われるのか完全にはわかりません。

また、これを実現するには.NET2.0を使用する必要があります。

11
dsp_099

簡単な方法だと思います。デフォルトの機能(詳細については、こちらをご覧ください 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);
27
Alexander V.

このリンクは、達成する必要があることを正確に説明しています。

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

1
Bijington

これは私がそれをした方法です:

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

ずさんですが、お役に立てば幸いです。

0
losangelo