gzipファイルを展開する
gzipを展開するコードを紹介します。
概要
C#でgzipを展開する場合は、、System.IO.Compression 名前空間の
GZipStream
を用います。
UI
以下のUIを作成します。
コード
下記のコードを記述します。
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;
using System.Text.RegularExpressions;
namespace GZipExtract
{
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);
GZipStream gzStream = new GZipStream(inStream, CompressionMode.Decompress);
Regex reg = new Regex(@"\.gz$");
string filename = reg.Replace(openFileDialog1.FileName, "");
FileStream outStream = new FileStream(filename, FileMode.Create, FileAccess.Write);
int size = 0;
while ((size = gzStream.Read(buffer, 0, buffer.Length)) > 0) {
outStream.Write(buffer, 0, size);
}
inStream.Close();
gzStream.Close();
outStream.Close();
textBox1.Text = "処理が終了しました。\r\n";
}
}
}
}
解説
ボタンをクリックするとファイルを開くダイアログを表示し、ファイルが選択された場合に処理を実行します。
バッファを準備し、ファイルを読み込むためのストリームを作成します。また、圧縮されたファイルを読み込むためのGZipStreamを作成します。GZipの展開はファイルの読み込み時に実行するため、GZipStreamのコンストラクタの第一引数には読み込み用のストリームを与えます。第二引数には圧縮モードを与えます。今回はデータの展開のため"CompressionMode.Decompress"を指定します。
byte[] buffer = new byte[4096];
FileStream inStream = new FileStream(openFileDialog1.FileName,
FileMode.Open, FileAccess.Read);
GZipStream gzStream = new GZipStream(inStream, CompressionMode.Decompress);
下記のコードはファイルを開くダイアログで開かれたファイル名から末尾の".gz"を削除するコードです。
Regex reg = new Regex(@"\.gz$");
string filename = reg.Replace(openFileDialog1.FileName, "");
ファイルを書き込むためのストリームを作成します。
FileStream outStream = new FileStream(filename, FileMode.Create, FileAccess.Write);
GZipStreamのReadメソッドを呼び出し圧縮されたデータを読み出し展開します。展開されたデータは出力用のストリームで書き出します。
int size = 0;
while ((size = gzStream.Read(buffer, 0, buffer.Length)) > 0) {
outStream.Write(buffer, 0, size);
}
inStream.Close();
gzStream.Close();
outStream.Close();
textBox1.Text = "処理が終了しました。\r\n";
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。ファイルを開くダイアログが表示されます。gzipで圧縮されているファイルを選択します。
ファイルが展開されます。処理が終了するとメッセージが表示されます。
圧縮ファイルが配置されているフォルダを確認します。".gz"の拡張子のない展開されたファイルが作成されました。
gzip圧縮されたファイルの展開ができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用