fopen関数 - ファイルを開く

fopen関数を使うと、ファイルを開くことができます。stdio.hヘッダを読み込むと使えます。

FILE* fopen(const char *file_name, const char *mode);

第一引数は、開きたいファイルのファイル名です。第二引数は、モードです。ファイルオープンに成功すると、ファイルストリームを表現する「FILE*型」の値が返されます。

モードの一覧

モードの一覧です。

モード動作
r読み込み(ファイルがないときはエラー)
w書き込み(ファイルがないときは新規作成)
a追加書き込み(ファイルがないときは新規作成)
r+読み込みと書き込み(ファイルがないときはエラー)
w+読み込みと書き込み(ファイルがないときは新規作成)
a+読み込みと追加書き込み(ファイルがないときは新規作成)

書き込みは、ファイルの内容がクリアされ、新しい内容で書き込むことを意味します。追加書き込みは、ファイルの末尾に追加して、書き込むことを意味します。

上記のモードはバイナリモードを意味する「b」と組み合わせることができます。

br
bw

デフォルトの動作は、テキストモードオープンされ、Windowsの場合にはファイルに含まれる改行文字である「CR」「LF」の並びが「\n」に置き換えられます。

バイナリモードでは、このような置き換えはされません。

fopen関数のサンプル

fopen関数のサンプルです。

ファイルを読み込む

fopen関数で読み込みモードでファイルを開き、fgetc関数で読み込み、標準出力に出力しています。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  
  // ファイルを読み込みモードで開く
  const char* in_file = "input.txt";
  FILE* in_fp = fopen(in_file, "r");
  if (in_fp == NULL) {
    fprintf(stderr, "Can't open file %s\n", in_file);
    exit(1);
  }
  
  // 読み込んで、標準出力に出力
  int32_t ch;
  while(ch = fgetc(in_fp)) {
    if (ch == EOF) {
      break;
    }
    fputc(ch, stdout);
  }
  
  // ファイルに書き込む
  const char* message = "Hello";
  fprintf(in_fp, "%s\n", message);
  
  // fopen関数でファイルを閉じる
  fclose(in_fp);
}

入力ファイル「input.txt」です。

Hello
World!

出力結果です。

Hello
World!

ファイルに書き込む

fopen関数で書き込みモードでファイルを開き、fprintf関数で内容を書きこみ、fclose関数で、ファイルを閉じています。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  
  // ファイルを書き込みモードで開く
  const char* out_file = "output.txt";
  FILE* out_fp = fopen(out_file, "w");
  if (out_fp == NULL) {
    fprintf(stderr, "Can't open file %s\n", out_file);
    exit(1);
  }
  
  // ファイルに書き込む
  const char* message = "Hello";
  fprintf(out_fp, "%s\n", message);
  
  // fopen関数でファイルを閉じる
  fopen(out_fp);
}

関連情報