C言語 ファイル処理 バイナリモードの読み書き

このページは、ファイル処理の流れ を読んでおくと
理解しやすくなります。


バイナリモードでの読み込み

読み込み用ファイル:text.txt

star
123

プログラムファイル:program.c

#include <stdio.h>

void main(void) {
      FILE* fp;
      int ss[1];

      fp = fopen("text.txt", "rb");

      while (ss=fgetc(fp)!=EOF) {
            printf("%c", (char)ss);
      }

      fclose(fp);
}

読み込み用ファイル:text.txtを読み込んで、
内容を出力するプログラムです。

まず、ファイルストリームポインタを宣言しています。

FILE* fp;

これは、1つのファイルを処理する上で必要なポインタです。

このポインタの中身を知る必要はありません。

続いて、ファイルを読み込み用モードでオープンしています。

fp = fopen("text.txt", "rb");

第2引数は、読み込み用なので、Readの r を指定しています。

そして、バイナリモードでの読み込みなので、
binary の b を追加しています。

次に実際に読み込みを行っています。

while (ss=fgetc(fp)!=EOF) {
      printf("%c", (char)ss);
}

fgetc関数は、1文字読み込んでその値を返します。

そして、ファイルから読み込むデータが無くなったら、
EOFが返されるので、
それまで、データを読み込んで出力しています。

出力は、次のようになります。

star 0x0A 0x0D ←改行コードは見えません。
123

最後にファイルのクローズを行っています。

バイナリモードでの書き込み

書き込み用ファイル:text.txt

中身はカラっぽ

プログラムファイル:program.c

#include <stdio.h>

void main(void) {
      FILE* fp;
      char ss[] = "star";
      int a = 123;

      fp = fopen("text.txt", "wb");

      fprintf(fp, "%s\n", ss);
      fprintf(fp, "%d\n", a);

      fclose(fp);

}

書き込み用ファイルに、
いろんなデータを書き込むプログラムです。

ファイルを書き込みモードでオープンしています。

fp = fopen("text.txt", "wb");

第2引数は、書き込み用なので、
Writeの w を指定しています。

そして、バイナリモードでの読み込みなので、
binary の b を追加しています。

次に実際に書き込みを行っています。

fprintf(fp, "%s\n", ss);
fprintf(fp, "%d\n", a);

fprintf関数は、指定したファイルへ書式指定文字列を書き込む関数です。

printf関数のファイル処理バージョンと言う感じです。

ただ、テキストモードと違い、
\nを出力すると、0x0A だけが出力されます。

ファイルへの書き込みが終わったら、ファイルクローズして終了です。

この結果、ファイルの中身は以下のようになります。

star 0x0A ←改行コードは、0x0Aだけ
123 0x0A ←改行コードは、0x0Aだけ