Zip 圧縮の機能強化により、圧縮ファイルのサイズが小さくなりました。 System.IO.Compression 名前空間を参照してください。 System.IO.Compression.ZipArchive によって、圧縮へのすばらしいサポートが追加されました。さらに、DeflateStream の実装によって、以前から存在していたパフォーマンスと圧縮の品質に関する問題がいくらか修正されました。DeflateStream クラスは、.NET Framework 4.5 から、広く普及している zlib ライブラリを使用するようになりました。結果として、以前のバージョンの .NET Framework よりも、デフレート アルゴリズムや (多くの場合) 小さな圧縮ファイルをより適切に実装できるようになりました。 ディスク上のアーカイブ全体を解凍するのに必要なのは、以下の 1 行のみです。 ZipFile.ExtractToDirectory(@"P:\files.zip", @"P:\files"); 代表的な操作では、アーカイブ全体をメモリに読み取る必要がなくなりました。たとえば、大きなアーカイブから 1 つのファイルを解凍するには、次のようにします。 using (ZipArchive zipArchive = ZipFile.Open(@"P:\files.zip", ZipArchiveMode.Read)) { foreach (ZipArchiveEntry entry in zipArchive.Entries) { if (entry.Name == "file.txt") { using (Stream stream = entry.Open()) { ProcessFile(stream); } } } } zip アーカイブの作成も、同様に機能します。ディレクトリから .zip アーカイブを作成するには、以下の 1 行を記述するだけです。 ZipFile.CreateFromDirectory(@"P:\files", @"P:\files.zip"); もちろん、手動で .zip アーカイブを構築することもでき、内部構造の完全な制御が可能になります。以下のコードは、C# のソース コード ファイルのみが追加されている (さらに、SourceCode というサブディレクトリも追加されている) .zip アーカイブを作成する方法を示します。 IEnumerable<string> files = Directory.EnumerateFiles(@"P:\files", "*.cs"); using (ZipArchive zipArchive = ZipFile.Open(@"P:\files.zip", ZipArchiveMode.Create)) { foreach (string file in files) { var entryName = Path.Combine("SourceCode", Path.GetFileName(file)); zipArchive.CreateEntryFromFile(file, entryName); } } 超多機能のアクセス解析が永久無料! コメント: |