gzipで圧縮をする - C#
C#でgzip圧縮をするコードを紹介します。
概要
C#でgzip圧縮をする場合は、
System.IO.Compression
名前空間の
GZipStream
クラスを利用します。
UI
以下のUIを作成します。ボタン、テキストボックス(複数行)、OpneFileDialog を配置します。
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.IO.Compression;
namespace GZipCompress
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
byte[] buffer = new byte[4096];
FileStream inStream = new FileStream(openFileDialog1.FileName,
FileMode.Open, FileAccess.Read);
FileStream outStream = new FileStream(openFileDialog1.FileName+".gz",
FileMode.Create, FileAccess.Write);
GZipStream gzStream = new GZipStream(outStream,CompressionMode.Compress);
int size=0;
while ((size = inStream.Read(buffer, 0, buffer.Length)) >0){
gzStream.Write(buffer,0,size);
}
inStream.Close();
gzStream.Close();
outStream.Close();
textBox1.Text = "処理が終了しました。\r\n";
}
}
}
}
解説
ボタンをクリックするとファイルを開くダイアログを表示し、ファイルが選択された場合に処理を実行します。
下記のコードでファイルからのデータを読み取るバッファを作成し、ファイル読み込み用のファイルストリームとファイル書き出し用のファイルストリームを作成します。
byte[] buffer = new byte[4096];
FileStream inStream = new FileStream(openFileDialog1.FileName,
FileMode.Open, FileAccess.Read);
FileStream outStream = new FileStream(openFileDialog1.FileName+".gz",
FileMode.Create, FileAccess.Write);
GZipStreamを作成します。ファイル圧縮時はファイルの書き込み時に圧縮をするため、コンストラクタの第一引数には出力のファイルストリームオブジェクトを与えます。第二引数には圧縮モードを設定します。今回は圧縮のため"CompressionMode.Compress"を与えます。
GZipStream gzStream = new GZipStream(outStream,CompressionMode.Compress);
int size=0;
while ((size = inStream.Read(buffer, 0, buffer.Length)) >0){
gzStream.Write(buffer,0,size);
}
入力用のストリームからファイルのデータを読み込み、GZipStreamを用いて書き出すことでデータを圧縮します。
ファイル末尾まで繰り返し、ファイルすべてを圧縮後、ストリームをクローズします。
int size=0;
while ((size = inStream.Read(buffer, 0, buffer.Length)) >0){
gzStream.Write(buffer,0,size);
}
inStream.Close();
gzStream.Close();
outStream.Close();
textBox1.Text = "処理が終了しました。\r\n";
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。ファイルを開くダイアログが表示されます。
圧縮するファイルを選択し開きます。
圧縮が始まります。処理が終了するとメッセージが表示されます。
圧縮したファイルのあるフォルダを確認します。圧縮したファイル名の末尾に".gz"が付いた圧縮ファイルが作成されました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用