【やさしいC#】lesson9.3 バイナリファイル

C#

バイナリファイルを読み書きする

  テキストファイルは、大変扱いやすいファイルとなっています。しかし、ファイルの内容によっては、ファイルサイズが大きくなったり、読み書きに時間がかかってしまうことがあります。
  このようなとき、バイナリファイル(binary file)を扱う便利です。バイナリファイルは、コンピュータ内部で扱われる形式のままにデータを扱うファイルです。さっそくコードを作成してみることにしましょう。

using System;
using System.Windows.Forms;
using System.IO;

namespace lesson9
{
    class sample3 : Form
    {
        private TextBox[] tb = new TextBox[5];
        private Button bt1, bt2;
        private FlowLayoutPanel flp;

        [STAThread]
        static void Main(string[] args)
        {
            Application.Run(new sample3());
        }
        public sample3()
        {
            this.Text = "lesson9";
            this.Width = 200; this.Height = 200;
            for (int i = 0; i < tb.Length; i++)
            {
                tb[i] = new TextBox();
                tb[i].Width = 30; tb[i].Height = 30;
                tb[i].Top = 0; tb[i].Left = i * tb[i].Width;
                tb[i].Text = Convert.ToString(i);
            }

            bt1 = new Button();
            bt2 = new Button();
            bt1.Text = "読込";
            bt2.Text = "保存";

            flp = new FlowLayoutPanel();
            flp.Dock = DockStyle.Bottom;

            bt1.Parent = flp;
            bt2.Parent = flp;
            flp.Parent = this;
            for (int i = 0; i < tb.Length; i++)
            {
                tb[i].Parent = this;
            }

            bt1.Click += new EventHandler(bt_Click);
            bt2.Click += new EventHandler(bt_Click);
        }
        public void bt_Click(object sender, EventArgs e)
        {
            if (sender == bt1)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "バイナリファイル|*.bin";

                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    BinaryReader br = 
                        new BinaryReader
                        (new FileStream(ofd.FileName,FileMode.Open,FileAccess.Read));

                    for (int i = 0; i < tb.Length; i++)
                    {
                        int num = br.ReadInt32();
                        tb[i].Text = Convert.ToString(num);
                    }
                    br.Close();
                }
            }
            else if (sender == bt2)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "バイナリファイル|*.bin";

                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    BinaryWriter br =
                        new BinaryWriter
                        (new FileStream(ofd.FileName, FileMode.OpenOrCreate, FileAccess.Write));

                    for (int i = 0; i < tb.Length; i++)
                    {
                        br.Write(Convert.ToInt32(tb[i].Text));
                    }
                    br.Close();
                }
            }
        }
    }
}

実行画面

  バイナリファイルを扱うには、バイトストリーム(byte stream)と呼ばれるストリームを使います。バイトストリームFileStreamを開く際には、ファイルモード・ファイルアクセスを指定します。ファイルモードは次の値を指定します。

ファイルモード説明
Append末尾に追加
Open既存のファイルを開く
OpenOrCreate既存のファイルを開く、また新規作成
Create新規作成
CreateNew新規作成(ファイルが存在する場合は上書き)
Truncate既存のファイルを開いて上書き
ファイルモード(System.IO.FileMode列挙体)

  ファイルアクセスは次の値を指定します。

ファイルアクセス説明
Read読み込み
ReadWrite読み書き
Write書き込み
ファイルアクセス(System.IO.FileAccess列挙体)

  バイナリファイルの読み書きにはBinaryReader、BinaryWriterクラスを使います。
  ここではデータを整数型のまま読み書きしているので、テキストファイルとして扱うよりも、ファイルサイズが小さくなります。ただし、このプログラムで作成したファイルは、通常のテキストエディタで編集することはできません。

コメント

タイトルとURLをコピーしました