C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でファイルを圧縮・解凍する方法(GZipStreamクラスの使い方)

C#では、System.IO.Compression 名前空間を利用することで、ファイルの圧縮(ZIP化)と解凍を簡単に実装できます。本記事では、GZipStreamクラスを使った基本的な圧縮・解凍の方法を、サンプルコードとともにわかりやすく解説します。

なお、GZipStreamを使用する場合は、プロジェクトに using System.IO.Compression; を追加してください。.NET Framework 4.5以降では、アセンブリ「System.IO.Compression」への参照も必要です。

ファイルの圧縮(ZIP化)

ファイルを圧縮するには、GZipStreamクラスFileStreamクラスと組み合わせて使用します。指定する主なパラメータは以下の2つです。

  • 圧縮対象となる元ファイル
  • 出力先の圧縮ファイル(zipファイル)の名前

ここでは、変数 outputFile が出力ファイルに相当し、圧縮対象のファイルはFileStream経由で読み込まれます。

圧縮のコード例

using(var compress = new GZipStream(outputFile, CompressionMode.Compress, false)) {
    byte[] b = new byte[inFile.Length];
    int read = inFile.Read(b, 0, b.Length);
    while (read > 0) {
        compress.Write(b, 0, read);
        read = inFile.Read(b, 0, b.Length);
    }
}

このコードでは、バッファ配列に少しずつデータを読み込みながら、GZipStreamへ書き込むことで圧縮を行っています。CompressionMode.Compress を指定することで、圧縮モードでの動作になります。

ファイルの解凍

圧縮されたファイルを解凍する場合も、同じGZipStreamクラスを使用します。このとき指定するパラメータは以下の通りです。

  • ソースファイル(圧縮済みファイル)
  • 出力先ファイルの名前

まず、ソースとなるzipファイルからGZipStreamを開きます。

using (var zip = new GZipStream(inStream, CompressionMode.Decompress, true))

解凍処理では、ループを使ってストリーム内にデータが存在する限り読み込みを続けます。読み取ったデータを出力ストリームへ書き込んでいくことで、解凍後のファイルが生成されます。

解凍のコード例

using(var zip = new GZipStream(inputStream, CompressionMode.Decompress, true)) {
    byte[] b = new byte[inputStream.Length];
    while (true) {
        int count = zip.Read(b, 0, b.Length);
        if (count != 0)
            outputStream.Write(b, 0, count);
        if (count != b.Length)
            break;
    }
}

CompressionMode.Decompress を指定することで解凍モードになり、Readメソッドで展開されたデータを順次取得できます。読み込んだバイト数が0になった時点でループを抜けることで、効率的に処理を終了できます。

まとめ

C#におけるファイルの圧縮・解凍は、GZipStreamクラスとFileStreamクラスを組み合わせるだけで実現できます。圧縮時は CompressionMode.Compress、解凍時は CompressionMode.Decompress を指定する点だけ覚えておけば、どちらもほぼ同じコード構造で実装可能です。ログファイルやバックアップデータのサイズ削減など、さまざまな場面で活用してみてください。

  1. MacのFinderに代わるおすすめアプリ5選!ファイル移動・管理を快適にするツール

    Macでの日常的なファイル管理といえば、やはり標準搭載の「Finder」が基本です。しかし、大量のファイルを扱う本格的な作業となると、Finderだけでは物足りなく感じることもあるでしょう。Finderを完全に置き換えるユーティリティを提供している企業もいくつかありますが、思い切って乗り換えなくても、日々のファイル整理をより快適にしてくれる代替アプリは数多く存在します。今回は、その中でも特におすすめの5つをご紹介します。1. Path FinderPath Finderは、Finder代替アプリの草分け的存在であり、筆者のお気に入りでもあります。「Finderの置き換え」と呼ばれていますが、実

  2. Androidでファイルやフォルダを見えなくする方法|ピリオドの付け方と隠しアプリ活用術

    Androidスマホでファイルやフォルダを人目から隠したいと思ったことはありませんか?画面ロックをかければ覗き見を防げますし、フォルダにパスワードを設定すれば不正アクセスも阻止できます。しかし、さらに一歩進んで、ファイルやフォルダそのものを「見えなくする」ことができたらどうでしょう。 この記事では、Android OSの仕組みを利用した簡単なトリックと、便利なアプリを使った方法の2つをご紹介します。 Androidでファイルやフォルダを非表示にする手順 まず、このトリックを実行するにはファイル管理アプリ(ファイラー)が必要です。普段使い慣れたお気に入りのアプリでも問題ありませんが、始める前に