私のコードは、名前空間「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'は現在のコンテキストに存在しません
どうすれば解決できますか?
アセンブリ「dll」をアセンブリに追加する必要があります。「System.IO.Compression.FileSystem.dll」-.NET 4.5を使用していることを確認してください(以前のフレームワークには存在しないため)。
詳細については、アセンブリと.NETバージョンを見つけることができます MSDNから
.NETで環境に優しいプログラマーである場合、DLL参照を MarcGravell として記載するには、次の手順に従います。
Visual C#で参照を追加するには
MSDN記事から 方法:[参照の追加]ダイアログボックスを使用して参照を追加または削除する 。
4.5にアップグレードできない場合は、外部パッケージを使用できます。その1つがDotNetZipLibのIonic.Zip.dllです。
using Ionic.Zip;
こちらから無料でダウンロードできます。 http://dotnetzip.codeplex.com/
参照に移動して、「System.IO.Compression.FileSystem」を追加するだけです。
私を助けたソリューション:[ツール]> [NuGetパッケージマネージャー]> [ソリューションのNuGetパッケージの管理...]> [参照]> [System.IO.Compression.ZipFileの検索とインストール]に移動します。
System.IO.Compression
は、Microsoftが管理する nugetパッケージ として利用できるようになりました。
ZipFile
を使用するには、System.IO.Compression.ZipFile
nuget package をダウンロードする必要があります。
ソリューションエクスプローラーで、[参照設定]を右クリックし、アセンブリをクリックして展開し、System.IO.Compression.FileSystemを見つけて、チェックされていることを確認します。その後、クラスで使用できます-using System.IO.Compression;
私はこれが古いスレッドであることを知っていますが、これに関する有用な情報を投稿することを避けられません。 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();
}
System.IO.Compression.ZipFileを、動作しているNugetリファレンスとして追加します
ここでの問題は、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-b23a75