C Sharpの基礎 - ファイル

提供:MochiuWiki : SUSE, EC, PCB
2019年7月9日 (火) 23:07時点における192.168.1.23による版 (ページの作成:「== 概要 == ファイルの内容をすべてbyte配列に読み込む、または、byte配列全体をファイルに書き込む場合、<br> Fileクラス(System.IO…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

ファイルの内容をすべてbyte配列に読み込む、または、byte配列全体をファイルに書き込む場合、
Fileクラス(System.IO名前空間)のReadAllBytesメソッドおよびWriteAllBytesメソッドを使用する。
これらのメソッド(静的)では、ファイルを開く、byte配列への読み込みまたはbyte配列の書き込み、ファイルを閉じるという3つの処理を
ReadAllBytesメソッドで実行可能である。
ReadAllBytesメソッドは、読み込むファイルのパス名をパラメータに指定して呼ぶと、戻り値としてファイルの内容を読み込んだbyte配列を返す。
また、WriteAllBytesメソッドでは、書き込むファイルのパス名(ファイルが存在する場合は上書き)と書き込むbyte配列をパラメータで指定する。
尚、WriteAllBytesメソッドの戻り値はない。

 byte[] data = File.ReadAllBytes(@"hoge.bin"); // 読み込み
 File.WriteAllBytes(@"newhoge.bin", data);     // 書き込み


サンプルコード(バイナリファイルを固定サイズで分割する)

次のサンプルコードは、ReadAllBytesメソッドとWriteAllBytesメソッドを使用したサンプルコードである。
このプログラムでは、バイナリファイルを読み込み、それを固定サイズ(サイズ : 1[MB])の複数ファイルに分割して出力する。
尚、出力する最後のファイルは固定サイズに満たない場合がある。

 using System;
 using System.IO;
 
 class BinarySplit
 {
    static void Main()
    {
       // バイナリファイルの読み込み
       byte[] src = File.ReadAllBytes(@"hoge.bin");
 
       int FILESIZE = 1024 * 1000; // 分割サイズ

       int num = 0;
 
       for (int remain = src.Length; remain > 0; remain -= FILESIZE)
       {
          int length = Math.Min(FILESIZE, remain);  // 作成する分割ファイルの実際のサイズ

          byte[] dest = new byte[length];           // 分割ファイルへ書き出すbyte配列の作成
          Array.Copy(src, num * FILESIZE, dest, 0, length);
 
          // 出力ファイル名(out0001.bin、out0002.bin、……)
          string name = String.Format("out{0:D4}.bin", num + 1);

          // byte配列のファイルへの書き込み
          File.WriteAllBytes(name, dest);

          num++;
       }
    }
 }


ReadAllBytesメソッドは、ファイル全体を一度に読み込むため、巨大なファイルを扱う場合には、
読み込みに掛かる時間や使用するメモリ量について注意が必要である。