「System.IO.Compression」名前空間に「ZipFile」クラスが見つかりませんでした


111

名前空間「System.IO.Compression」で「Zipfile」クラスを使用できません。コードは次のとおりです。

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string startPath = @"c:\example\start";
            string zipPath = @"c:\example\result.zip";
            string extractPath = @"c:\example\extract";

            ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest,true);

            ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
    }
}

エラーは:

「zipfile」という名前は現在のコンテキストに存在しません

どうすれば解決できますか?


回答:


212

これには追加の参照が必要です。これを行う最も便利な方法は、NuGetパッケージSystem.IO.Compression.ZipFileを使用することです。

<!-- Version here correct at time of writing, but please check for latest -->
<PackageReference Include="System.IO.Compression.ZipFile" Version="4.3.0" />

NuGetを使用せずに.NET Frameworkで作業している場合は、アセンブリへのdll参照「System.IO.Compression.FileSystem.dll」を追加する必要があります。少なくとも.NET 4.5を使用していることを確認してください(以前のフレームワークに存在します)。

詳細については、MSDNからアセンブリと.NETバージョンを見つけることができます。


2
私は.NET 4.0を使用しています...このdllファイルが見つかりません
Mohamed Kamal 2013年

17
@MohamedKamalは確かに、それまでは存在しなかったため、.NET 4.5を使用しない限り実行しません。「バージョン情報」の情報-「サポート対象:4.5」
マークグラベル

1
@MarcGravell同じエラーが発生しています。Visual Studio-> help-> About Microsoft Visual Studioを確認したところ、.NETバージョン4.5.51650で表示されました。次に何を確認する必要がありますか?
foxwendy

4
私にはFileSystemリファレンスがありませんでした。のみSystem.IO.Compression。ありがとう。奇妙なことに、クラスの名前空間にないファイルが必要です。それは慣習からの奇妙な逸脱です。
Chris Benard、2016年

3
@ChrisBenard同じ問題が見つかりました。System.IO.Compressionへの参照を含めるだけでは不十分で、FileSystemも必要でした。確かに興味深い。
dckuehn 2016年

32

.NETで環境に配慮したプログラマーである人がMarcGravellが指摘したようにDLL参照を追加するには、次の手順に従います。

Visual C#で参照を追加するには

  1. ソリューションエクスプローラーでプロジェクトノードを右クリックし、[参照の追加]をクリックします。
  2. [参照の追加]ダイアログボックスで、参照するコンポーネントのタイプを示すタブを選択します。
  3. 参照するコンポーネントを選択し、[OK]をクリックします。

MSDN記事の「方法:参照の追加ダイアログボックスを使用して参照を追加または削除する」


1
情報をありがとう。私はすでにSystem.IO.Compressionを使用していました。ただし、OPの元のエラーなしでZipFileをコンパイルするには、前述のようにSystem.IO.Compression.FileSystemを使用するための参照を追加する必要がありました。
ヒュー・シーグレイブス2016

17

4.5にアップグレードできない場合は、外部パッケージを使用できます。DotNetZipLibのIonic.Zip.dllがその1つです。

using Ionic.Zip;

ここから無料でダウンロードできます。http://dotnetzip.codeplex.com/


3
または、NuGetを介してインストールする
northben 2014年

2
これは質問とどのように関連していますか?
eugenekgn 2014年

20
彼の質問は「どうすれば修正できるのか?」でした。そしてこれはそれを修正する一つの方法です-彼のバージョンの.netはそれをサポートしていませんでした。
John Faulkner

4
残念ながら、アップグレードは選択できない場合があります。賛成票を持っています。
sampathsris 2015年

1
あなたはXPがインストールされているし、任意のインストールを行うことができないあなたのプログラムが(.NET 4.5フレームワークをインストールするには)2000年のPCに書き込みをしている場合、これは関連性がある
Mukus

10

参照に移動し、「System.IO.Compression.FileSystem」を追加するだけです。


「参考文献」を見つける場所は無制限です。これがどこにあるのか、もっとヒントを教えてください。
Daniel Kaplan

2

私を助けたソリューション:ツール> NuGetパッケージマネージャー>ソリューション用にパッケージ化されたNuGetを管理...>参照> System.IO.Compression.ZipFileを検索してインストールする


1

私はこれが古いスレッドであることを知っていますが、これに関するいくつかの有用な情報を投稿することを避けられません。Zipに関する質問が頻繁に出てくるので、よくある質問のほとんどにほぼ答えています。

4.5+の使用に関するフレームワークの問題を回避するには...それらはjaime-olivaresによって作成されたZipStorerクラスです:https : //github.com/jaime-olivares/zipstorer、彼はこのクラスを使用する方法の例をまた、特定のファイル名を検索する方法の例も追加しました。

そして、これを使用して例として特定のファイル拡張子を反復処理する方法のリファレンスとして、これを行うことができます:

#region
/// <summary>
/// Custom Method - Check if 'string' has '.png' or '.PNG' extension.
/// </summary>
static bool HasPNGExtension(string filename)
{
    return Path.GetExtension(filename).Equals(".png", StringComparison.InvariantCultureIgnoreCase)
        || Path.GetExtension(filename).Equals(".PNG", StringComparison.InvariantCultureIgnoreCase);
}
#endregion

private void button1_Click(object sender, EventArgs e)
{
    //NOTE: I recommend you add path checking first here, added the below as example ONLY.
    string ZIPfileLocationHere = @"C:\Users\Name\Desktop\test.zip";
    string EXTRACTIONLocationHere = @"C:\Users\Name\Desktop";

    //Opens existing zip file.
    ZipStorer zip = ZipStorer.Open(ZIPfileLocationHere, FileAccess.Read);

    //Read all directory contents.
    List<ZipStorer.ZipFileEntry> dir = zip.ReadCentralDir();

    foreach (ZipStorer.ZipFileEntry entry in dir)
    {
        try
        {
            //If the files in the zip are "*.png or *.PNG" extract them.
            string path = Path.Combine(EXTRACTIONLocationHere, (entry.FilenameInZip));
            if (HasPNGExtension(path))
            {
                //Extract the file.
                zip.ExtractFile(entry, path);
            }
        }
        catch (InvalidDataException)
        {
            MessageBox.Show("Error: The ZIP file is invalid or corrupted");
            continue;
        }
        catch
        {
            MessageBox.Show("Error: An unknown error ocurred while processing the ZIP file.");
            continue;
        }
    }
    zip.Close();
}




0

ここでの問題は、System.IO.Compressionへの参照を追加したばかりで、System.IO.Compression.Filesystem.dllへの参照が欠落していることです。

そして、それを.net 4.5以降で実行する必要があります(古いバージョンには存在しないため)。

TechNetにスクリプトを投稿しました。たぶん.net 4.5または4.7が必要な人には便利でしょう。

https://gallery.technet.microsoft.com/scriptcenter/Create-a-Zip-file-from-a-b23a7530

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.