「C Sharpの基礎 - ファイル」の版間の差分

ナビゲーションに移動 検索に移動
2行目: 2行目:
==== バイナリファイルの読み込みと書き込み ====
==== バイナリファイルの読み込みと書き込み ====
ファイルの内容をすべてbyte配列に読み込む、または、byte配列全体をファイルに書き込む場合、<br>
ファイルの内容をすべてbyte配列に読み込む、または、byte配列全体をファイルに書き込む場合、<br>
Fileクラス(System.IO名前空間)のReadAllBytesメソッドおよびWriteAllBytesメソッドを使用する。<br>
<code>File</code>クラス(<code>System.IO</code>名前空間)の<code>ReadAllBytes</code>メソッドおよび<code>WriteAllBytes</code>メソッドを使用する。<br>
これらのメソッド(静的)では、ファイルを開く、byte配列への読み込みまたはbyte配列の書き込み、ファイルを閉じるという3つの処理を<br>
<br>
ReadAllBytesメソッドで実行可能である。<br>
これらのメソッド(静的)では、"ファイルを開く"、"byte配列への読み込みまたはbyte配列の書き込み"、"ファイルを閉じる"という3つの処理を<br>
ReadAllBytesメソッドは、読み込むファイルのパス名をパラメータに指定して呼ぶと、戻り値としてファイルの内容を読み込んだbyte配列を返す。<br>
<code>ReadAllBytes</code>メソッドで実行可能である。<br>
また、WriteAllBytesメソッドでは、書き込むファイルのパス名(ファイルが存在する場合は上書き)と書き込むbyte配列をパラメータで指定する。<br>
<code>ReadAllBytes</code>メソッドは、読み込むファイルのパス名をパラメータに指定して呼ぶと、戻り値としてファイルの内容を読み込んだbyte配列を返す。<br>
尚、WriteAllBytesメソッドの戻り値はない。<br>
<br>
  <source lang="cpp">
また、<code>WriteAllBytes</code>メソッドでは、書き込むファイルのパス名(ファイルが存在する場合は上書き)と書き込むbyte配列をパラメータで指定する。<br>
なお、<code>WriteAllBytes</code>メソッドの戻り値は無い。<br>
  <syntaxhighlight lang="c#">
  byte[] data = File.ReadAllBytes(@"hoge.bin"); // 読み込み
  byte[] data = File.ReadAllBytes(@"hoge.bin"); // 読み込み
  File.WriteAllBytes(@"newhoge.bin", data);    // 書き込み
  File.WriteAllBytes(@"newhoge.bin", data);    // 書き込み
  </source>
  </syntaxhighlight>
<br>
==== バイナリファイルを固定サイズで分割する ====
以下の例では、<code>File</code>クラスの<code>ReadAllBytes</code>メソッドと<code>WriteAllBytes</code>メソッドを使用している。<br>
バイナリファイルを読み込み、それを固定サイズ(1[MB])の複数ファイルに分割して出力している。<br>
<br>
<br>
==== サンプルコード(バイナリファイルを固定サイズで分割する) ====
なお、出力する最後のファイルは固定サイズに満たない場合がある。<br>
次のサンプルコードは、ReadAllBytesメソッドとWriteAllBytesメソッドを使用したサンプルコードである。<br>
このプログラムでは、バイナリファイルを読み込み、それを固定サイズ(サイズ : 1[MB])の複数ファイルに分割して出力する。<br>
尚、出力する最後のファイルは固定サイズに満たない場合がある。<br>
  <syntaxhighlight lang="C#">
  <syntaxhighlight lang="C#">
  using System;
  using System;
51行目: 54行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
ReadAllBytesメソッドは、ファイル全体を一度に読み込むため、巨大なファイルを扱う場合には、<br>
<u>※注意</u><br>
読み込みに掛かる時間や使用するメモリ量について注意が必要である。<br>
<u>ReadAllBytesメソッドは、ファイル全体を一度に読み込むため、</u><br>
<u>サイズの大きいファイルを扱う場合は、読み込みに掛かる時間や使用するメモリ量について注意が必要である。</u><br>
<br>
<br>
==== サンプルコード(非同期でバイナリファイルを読み書きする) ====
==== 非同期でバイナリファイルを読み書きする ====
バイナリファイルへ書き込んだ後、それを読み込むサンプルコードに示す。<br>
以下の例では、バイナリファイルへ書き込んだ後、そのバイナリファイルを読み込んでいる。<br>
この例では、書き込み用に開くときにFileMode.Createを指定しているので上書きになる。(追記する場合 : FileMode.Append)<br>
バイナリファイルを書き込み用として開く時に<code>FileMode.Create</code>を指定しているため、上書きになる。(追記する場合は、<code>FileMode.Append</code>)<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  async Task BinaryReadWriteAsync(byte[] data)
  public async Task BinaryReadWriteAsync(byte[] data)
  {
  {
     const string FilePath = @".\sample.dat";  // 読み書きするファイル
     const string FilePath = @".\sample.dat";  // 読み書きするファイル


     // バイナリファイルへ書き込み
     // バイナリファイルとして書き込む
     // ファイルを上書きモードで開く(ファイルが存在しない場合は作成)
     // ファイルを上書きモードで開く(ファイルが存在しない場合は作成する)
     // 追加モードにするにはFileModeをAppendに変える
     // 追記モードにするには、FileMode.Appendに変更する
     using (var fs = new FileStream(FilePath, FileMode.Create, FileAccess.Write))
     using (var fs = new FileStream(FilePath, FileMode.Create, FileAccess.Write))
     {
     {

案内メニュー