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); }