Csharp-binary-files

提供:Dev Guides
移動先:案内検索

バイナリファイルの読み取りと書き込み

*BinaryReader* および *BinaryWriter* クラスは、バイナリファイルの読み取りと書き込みに使用されます。

BinaryReaderクラス

*BinaryReader* クラスは、ファイルからバイナリデータを読み取るために使用されます。 *BinaryReader* オブジェクトは、 *FileStream* オブジェクトをコンストラクターに渡すことで作成されます。

次の表では、 BinaryReader クラスで一般的に使用される methods について説明します。

Sr.No. Method & Description
1

public override void Close()

BinaryReaderオブジェクトと基になるストリームを閉じます。

2

public virtual int Read()

基になるストリームから文字を読み取り、ストリームの現在の位置を進めます。

3

public virtual bool ReadBoolean()

現在のストリームからブール値を読み取り、ストリームの現在の位置を1バイト進めます。

4

public virtual byte ReadByte()

現在のストリームから次のバイトを読み取り、ストリームの現在の位置を1バイト進めます。

5

public virtual byte[] ReadBytes(int count)

現在のストリームから指定されたバイト数をバイト配列に読み込み、そのバイト数だけ現在の位置を進めます。

6

public virtual char ReadChar()

現在のストリームから次の文字を読み取り、使用されているエンコーディングとストリームから読み取られている特定の文字に従って、ストリームの現在の位置を進めます。

7

public virtual char[] ReadChars(int count)

現在のストリームから指定された数の文字を読み取り、データを文字配列で返し、使用されているエンコーディングとストリームから読み取られている特定の文字に従って現在の位置を進めます。

8

public virtual double ReadDouble()

現在のストリームから8バイトの浮動小数点値を読み取り、ストリームの現在の位置を8バイト進めます。

9

public virtual int ReadInt32()

現在のストリームから4バイトの符号付き整数を読み取り、ストリームの現在の位置を4バイト進めます。

10

public virtual string ReadString()

現在のストリームから文字列を読み取ります。 文字列には長さが接頭辞として付けられ、一度に7ビットの整数としてエンコードされます。

BinaryWriterクラス

*BinaryWriter* クラスは、ストリームにバイナリデータを書き込むために使用されます。 BinaryWriterオブジェクトは、FileStreamオブジェクトをそのコンストラクターに渡すことによって作成されます。

次の表に、BinaryWriterクラスの一般的に使用されるメソッドを示します。

Sr.No. Function & Description
1

public override void Close()

BinaryWriterオブジェクトと基になるストリームを閉じます。

2

public virtual void Flush()

現在のライタのすべてのバッファをクリアし、バッファされたデータを基礎となるデバイスに書き込みます。

3

public virtual long Seek(int offset, SeekOrigin origin)

現在のストリーム内の位置を設定します。

4

public virtual void Write(bool value)

1バイトのブール値を現在のストリームに書き込みます。0はfalseを表し、1はtrueを表します。

5

public virtual void Write(byte value)

符号なしバイトを現在のストリームに書き込み、ストリームの位置を1バイト進めます。

6

public virtual void Write(byte[] buffer)

基になるストリームにバイト配列を書き込みます。

7

public virtual void Write(char ch)

現在のストリームにUnicode文字を書き込み、使用されているエンコーディングとストリームに書き込まれている特定の文字に従って、ストリームの現在の位置を進めます。

8

public virtual void Write(char[] chars)

文字配列を現在のストリームに書き込み、使用されているEncodingとストリームに書き込まれている特定の文字に従って、ストリームの現在位置を進めます。

9

public virtual void Write(double value)

8バイトの浮動小数点値を現在のストリームに書き込み、ストリームの位置を8バイト進めます。

10

public virtual void Write(int value)

4バイトの符号付き整数を現在のストリームに書き込み、ストリームの位置を4バイト進めます。

11

public virtual void Write(string value)

BinaryWriterの現在のエンコーディングでこのストリームに長さの接頭辞付き文字列を書き込み、使用されているエンコーディングとストリームに書き込まれている特定の文字に従ってストリームの現在の位置を進めます。

メソッドの完全なリストについては、Microsoft C#のドキュメントをご覧ください。

次の例は、バイナリデータの読み書きを示しています-

using System;
using System.IO;

namespace BinaryFileApplication {
   class Program {
      static void Main(string[] args) {
         BinaryWriter bw;
         BinaryReader br;

         int i = 25;
         double d = 3.14157;
         bool b = true;
         string s = "I am happy";

        //create the file
         try {
            bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot create file.");
            return;
         }

        //writing into the file
         try {
            bw.Write(i);
            bw.Write(d);
            bw.Write(b);
            bw.Write(s);
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot write to file.");
            return;
         }
         bw.Close();

        //reading from the file
         try {
            br = new BinaryReader(new FileStream("mydata", FileMode.Open));
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot open file.");
            return;
         }

         try {
            i = br.ReadInt32();
            Console.WriteLine("Integer data: {0}", i);
            d = br.ReadDouble();
            Console.WriteLine("Double data: {0}", d);
            b = br.ReadBoolean();
            Console.WriteLine("Boolean data: {0}", b);
            s = br.ReadString();
            Console.WriteLine("String data: {0}", s);
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot read from file.");
            return;
         }
         br.Close();
         Console.ReadKey();
      }
   }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Integer data: 25
Double data: 3.14157
Boolean data: True
String data: I am happy