7

現在取り組んでいるプロジェクトに解凍機能を実装しようとしていますが、問題は、ライセンスに関していくつかの制限があり、プロジェクトがクローズド ソースであるため、GPL と同様のライセンスを避ける必要があることです。 .

つまり、SharpZipLib を使用できなくなったということです。..Net ライブラリに移動しました。現在、ZipArchive ライブラリを使用しようとしています。

問題は、ディレクトリ/サブディレクトリが抽出されないことです。そのため、内部に file.txt を含む blabla.zip と /folder/file2.txt がある場合、すべてが file.txt と file2.txt に抽出されるため、サブディレクトリを無視します。

MSDN Web サイトの例を使用しています。次のようになります。

using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
  foreach (ZipArchiveEntry entry in archive.Entries)
  {
    entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
  } 
}

これを解決する方法はありますか?

4

1 に答える 1

15

アーカイブが次のようになっている場合:

archive.zip
  file.txt
  someFolder
    file2.txt

次にentry.FullName、file2.txtsomeFolder/file2.txtの場合は、フォルダーが存在する場合でもコードが正常に機能するようにします。だからあなたはそれを作成することができます。

foreach (ZipArchiveEntry entry in archive.Entries)
{
    string fullPath = Path.Combine(extractPath, entry.FullName);
    if (String.IsNullOrEmpty(entry.Name))
    {
        Directory.CreateDirectory(fullPath);
    }
    else
    {
        if (!entry.Name.Equals("please dont extract me.txt"))
        {
            entry.ExtractToFile(fullPath);
        }
    }
}

ZipFileまたは、すべてのアーカイブを抽出する必要がある場合は、静的メソッドを使用することをお勧めします

ZipFile.ExtractToDirectory(zipPath, extractPath); 
于 2013-09-10T08:53:18.790 に答える