ホームページ  >  記事  >  バックエンド開発  >  .NET での zip の圧縮と解凍

.NET での zip の圧縮と解凍

巴扎黑
巴扎黑オリジナル
2016-12-19 16:35:232160ブラウズ

Zip の圧縮と解凍は、次のさまざまな方法で実行できます: 1. System.IO.Packaging プログラムを使用する; 2. サードパーティのクラス ライブラリを使用する; 3. System.IO.Compression 名前空間の新しい ZipArchive を使用する、ZipFile クラスおよびその他の実装

1. System.IO.Packaging プログラムを使用して圧縮および解凍します

パッケージは、定義された物理形式でオブジェクトを単一のエンティティに編成するために使用できる抽象クラスです。移植性と効率性 Access .ZIP ファイルは、パッケージの主要な物理形式です。他のパッケージ実装では、XML ドキュメント、データベース、Web サービスなどの他の物理形式を使用する場合があります。パッケージは抽象クラスである Package.Open ですが、ファイル システムと同様に、パッケージに含まれる項目は階層的に構成されたフォルダーおよびファイルで参照されます。このメソッドは、デフォルトで ZipPackage 派生クラスを使用します。System.IO.Packaging プログラムは、WindowsBase.dll のアセンブリの下にあります。これを使用する場合は、WindowsBase への参照を追加する必要があります。 1. フォルダー全体を圧縮ファイルに圧縮します。 code //< sを使用して - 偽。
{回 結果を返す}

{
(

如果 = Package.open (compositiondFilename, Filemode.create)
{
varist = Director.enumerateFiles (フォルダー名, "*", Searchoption .AllDirectories );u parturidocument = packurihelper.createparturi parturidocment、 ""、compressionoption.maximum);
コード /// <概要 >
Arチャイブファイル ;/Return & gt; ){back結果;(Package = Package.Open(compressedFileName, FileMode.OpenOrCreate)) を使用します。 package.DeletePart(partUriDocument), "", Compressionoption.maximum);
}
} 真 結果 = true; }

(例外 5) {
新しい異常をスローする ("" Error Compression File "+ファイル名, E); Declaze/code /// & lt; Abstract & gt;
/// 抽出のコンテナー。注: コンテナは Open Packaging Convention (OPC) 仕様として作成する必要があります
> {结果 戻る結果
}

} DirectoryInfo DirectoryInfo = 新しい DirectoryInfo (ファイル フォルダー名)
(! Directoryinfo.exists)directoryInfo.Create();

using (Package = パッケージ. Open (compressedFileName、FileMode.Open、FileAccess.Read)) Part in package.GetParts() )
PackagePart、フォルダー名、オーバーライド既存);追いつく (例外) 5)
文字列 stringPart = targetdirectory + HttpUtility.UrlDecode (packagePart.Uri.ToString()) の置換 ('\', '/')。 hileStream filestream fileStream = new Filestream(StringPart、FileMode.Create))
Filestream

}
} 包 圧縮ファイルを使用して、圧縮ファイル内に [Content] .xml を自動的に生成します。これは、解凍する圧縮ファイルがサポートするファイル形式を記述するために使用されます。

コード
<タイプ xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <デフォルト拡張子="vsixmanifest" ContentType="text/xml"/> ;デフォルトの拡張子="dll" ContentType="application/octet-stream"/>
<デフォルトの拡張子="PNG" ContentType="application/octet-stream"/>
; <デフォルトの拡張子="txt" ContentType ="text/plain"/>

圧縮ファイルに [Content] の .xml ファイルが含まれていない場合も同様です。 ]、または[コンテンツ]の.xmlファイルに対応する拡張子の記述が含まれていない場合([コンテンツ]の.xmlを手動で追加することも可能)、ファイルは解凍されません。 2 番目に、SharpZipLib や DotNetZip などのサードパーティ ライブラリ圧縮を使用した圧縮と解凍。

1. 「#ziplib」としても知られるSharpZipLibは、GPLオープンソースに基づいており、ZIP、tarを含むGZIP、およびBZip2圧縮の圧縮と解凍をサポートしています。

.NET 1.1、.NET 2.0 (3.5、4.0) をサポートします。

(1) ZIP 圧縮

Codepublic static無効な zip(String SRCFILE, String DstFile, int バッファ サイズ)
{
FileStream fileStreamIn = new FileStream
(SRCFILE, FileMode.Open, FileAccess.Read);
FileStream fileStreamOut = new FileStream
(DstFile, FileMode.Create, FileAccess.Write);
ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut);
エントリ ZipEntry = new ZipEntry(Path.GetFileName) (SRCFILE));
int size;
size = fileStreamIn.Read(buffer, 0, size); zipOutStream.Close(); zipOutStream.Close(); zipOutStream.Close();ファイル、int バッファ サイズ)
{
FileStream fileStreamIn = new FileStream
(SRCFILE, FileMode.Open, FileAccess .Read);
ZipInputStream zipInStream(fileStreamIn) ;
ZipEntry エントリ = zipInStream.GetNextEntry();
FileStream fileStreamOut = 新しい FileStream
(DstFile + @"" + エントリ.Name, FileMode.Create, FileAccess.Write) ;
INT サイズ;
バイト [] クッション = 新しいバイト & lt; バッファ サイズ/& gt;;;
サイズ = zipinstream.read (サイズ> 0); Close();
fileStreamIn.Close();
} 2. DotNetLib は「WS-PL」オープン ソースに基づいており、使用するのは比較的簡単です (1) 使用される郵便番号 (ZipFile = new ZipFile())
{
zip.AddFile("readme.txt");
zip.AddFile("7440-N49th.png");
zip.AddFile("2008_Annual_Report" .pdf");
zip.Save("Archive.zip") ;
} (2) Codeprivate を解凍する 無効な MyExtract()
{
String zipToUnpack = "C1P3SML.zip";
String unpackDirectory = "ファイルを解凍する "; (Zip1 は zipfile = zipfile.read (ziptounpack) を使用します)
{
// ここでは各エントリを抽出できますが、エントリ名、サイズ、日付、再審査ボックスの状態に応じて
を抽出できます。 Wait // f Foreach (ZIPENTRY's E in ZIP1) {
E.Extract (unpackdirectory, ExtractXistingFileAction.overWritesilently); 5 Ziparchive、ZipFile、その他のカテゴリを使用します。 圧縮と解凍 コード コード 静的で無効なメイン (string []] {
string zippath = @"C: user exampleuser start.zip"
string extlictpath = @"C: ユーザー例ユーザー抽出";string newfile = "c:ユーザーExampleuser newfile.txt"

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。