SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

テキストを直接Zipファイルに保存する.NETアプリケーションの作成

ComponentOne Studio Enterprise 2011JのZIP for .NETコンポーネントを使ったアプリケーションの作成

  • このエントリーをはてなブックマークに追加

入力されたテキストデータをZip化する処理

 TextBoxコントロールに入力された値を、圧縮してZipファイルに保存する処理を行います。まず、C1ZipFileクラスのCreateメソッドを使用して、保存するZipファイル名を作成します(引数はファイル名)。パス名を省略すると、実行プログラムと同じフォルダに保存されます。ファイル名を作成したら、メモリストリームを開き、TextBoxコントロールのTextプロパティの値を書き出します。

Visual Basic
Imports System.IO
Imports C1.C1Zip

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        '保存ファイルの作成
        Dim zipFile As New C1ZipFile()
        zipFile.Create("myzipdata.zip")

        ' メモリストリームを開く
        Dim memstr As New MemoryStream()

        ' 圧縮ストリームにデータを書き込む
        Dim sw As New StreamWriter(memstr)
        sw.Write(TextBox1.Text)

        ' すべての保留データをフラッシュ
        sw.Flush()

        memstr.Position = 0
C#
using System.IO;
using C1.C1Zip;

namespace zipfile_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //保存ファイルの作成
            C1ZipFile zipFile = new C1ZipFile();
            zipFile.Create("myzipdata.zip");

            // メモリストリームを開く
            MemoryStream memstr = new MemoryStream();

            // 圧縮ストリームにデータを書き込む
            StreamWriter sw = new StreamWriter(memstr);
            sw.Write(textBox1.Text);

            // すべての保留データをフラッシュ
            sw.Flush();

            memstr.Position = 0;

 このメモリストリーム内のデータを、ZipファイルのEntriesクラスのAddメソッドを使用してエントリとして追加します。「エントリ」は、Zipファイル内の1つのファイル単位と思ってください。

 ここで、ストリームのデータをテキストファイルに保存し、Zipファイルに追加します。これで、TextBoxコントロールの入力データをテキストファイルとZipファイルに一度に保存してしまいます。

Visual Basic
'ZIPエントリを追加
zipFile.Entries.Add(memstr, "sample.txt")
MessageBox.Show("圧縮ファイルに保存しました", "圧縮の実行", MessageBoxButtons.OK, MessageBoxIcon.Information)

'ストリームを閉じる
memstr.Close()
C#
//ZIPエントリを追加
zipFile.Entries.Add(memstr, "sample.txt");
MessageBox.Show("圧縮ファイルに保存しました", "圧縮の実行", MessageBoxButtons.OK, MessageBoxIcon.Information);

//ストリームを閉じる
memstr.Close();
テキストファイル「sample.txt」とZipファイル「myzipdata.zip」の2つのファイルが作成される
テキストファイル「sample.txt」とZipファイル「myzipdata.zip」の2つのファイルが作成される

Zipファイルから直接データを読み込む処理

 Zipファイルから直接データを読み出す処理を作成します。通常は、一度Zipファイルを解凍して中のファイルを取り出しそれからデータにアクセスしますが、C1ZipコントロールではZipファイルの中身に直接アクセスできます。

 アクセスの順序は、最初にZipファイルをOpenメソッドで開き、アクセスしたいファイルをエントリに指定してストリームに接続し、StreamReaderクラスのReadToEndメソッドでデータをバッファに読み出します。

Visual Basic
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

    Dim zip As New C1ZipFile()
    zip.Open("myzipdata.zip")

    ' 任意のエントリで入力ストリームを開きます。
    Dim ze As C1ZipEntry = zip.Entries("sample.txt")
    Dim s As Stream = ze.OpenReader()

    ' StreamReader をストリームで開きます。
    Dim sr As New StreamReader(s)
    TextBox1.Text = sr.ReadToEnd()

    ' StreamReader を使用して閉じます。
    sr.Close()
End Sub
C#
private void button3_Click(object sender, EventArgs e)
{
    C1ZipFile zip = new C1ZipFile();
    zip.Open("myzipdata.zip");

    // 任意のエントリで入力ストリームを開きます。
    C1ZipEntry ze = zip.Entries["sample.txt"];
    Stream s = ze.OpenReader();

    // StreamReader をストリームで開きます。
    StreamReader sr = new StreamReader(s);
    textBox1.Text = sr.ReadToEnd();

    // StreamReader を使用して閉じます。
    sr.Close();
}

まとめ

 Zip形式はオープンスタンダードで、既に広く普及している多くのアプリケーションでサポートされています。Zipファイルは、多くのファイルを1つに統合でき、アプリケーションの配備がより簡単になります。また、データを圧縮することで、ディスク容量を小さくでき、ネットワーク帯域幅の節約にもなります。

 C1Zipコンポーネントは、テキストデータだけでなく、バイナリデータやシリアル化されたデータ、データベースファイルなども圧縮ファイルとして保存できます。ディスクとの読み書きだけでなく、ストリームに対してもデータの圧縮・展開が行えますので、アプリケーションのメモリ上でのデータ処理でも威力を発揮することができるでしょう。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6381 2012/01/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング