ホームC言語Tips集ファイル ≫ ファイルをオープンする

C言語Tips集 - ファイルをオープンする

C言語でファイルに対して読み書きを行うためには,まずファイルをオープン (open) する必要があります.C言語でファイルをオープンするには stdio.hfopen 関数を使用します.

fopen

#include <stdio.h>
FILE * fopen(
    const char * restrict filename,
    const char * restrict mode
);

fopen 関数は filename で指定されたファイルをオープンし,そのファイルにストリーム (stream) を結び付ける関数です.なお,mode にはモード (オープンしたいファイルの種類や,データの読み書きの方法) を指定します.

fopen 関数はファイルのオープンに成功した場合は,オープンしたストリームを制御するオブジェクトへのポインタを返します.失敗した場合は,空ポインタ (NULL) を返します.

ファイルのオープンのイメージ図

fopen

モード

引数 mode に指定できるモードは以下の通りです.

モードファイル機能ファイルが
ないとき
"r"テキスト読み取りエラー
"w"テキスト書き込み新規作成
"a"テキスト追加書き込み新規作成
"rb"バイナリ読み取りエラー
"wb"バイナリ書き込み新規作成
"ab"バイナリ追加書き込み新規作成
"r+"テキスト更新(読み取り及び書込み)エラー
"w+"テキスト更新(読み取り及び書込み)新規作成
"a+"テキスト更新(追加書き込み)新規作成
"r+b" もしくは
"rb+"
バイナリ更新(読み取り及び書き込み)エラー
"w+b" もしくは
"wb+"
バイナリ更新(読み取り及び書き込み)新規作成
"a+b" もしくは
"ab+"
バイナリ更新(追加書き込み)新規作成

fopen 関数を使用したファイルのオープンは多くの場合,以下のような書き方で実装されます.以下では例として sample.txt という名前のファイルを書き込みモードでオープンしています.

char *filename = "sample.txt";
FILE *fp;

/* ファイルのオープン */
if ((fp = fopen(filename, "w")) == NULL) {
    /* エラー処理 */
}

...

/* ファイルのクローズ */
fclose(fp);

C言語サンプルプログラム

以下に fopen 関数を使用してファイルを書き込みモードでオープンするだけのシンプルなサンプルプログラムを示します.

/* header files */
#include <stdio.h>
#include <stdlib.h>

/* main */
int main(void) {
    FILE *fp;
    char *filename = "sample.txt";

    /* ファイルのオープン */
    if ((fp = fopen(filename, "w")) == NULL) {
        fprintf(stderr, "%sのオープンに失敗しました.\n", filename);
        exit(EXIT_FAILURE);
    }

    printf("ファイルのオープンに成功しました.\n");
    printf("/*\n");
    printf(" 普通はファイルに対して書き込みを行うコードを\n");
    printf(" ここに書きます.\n");
    printf("*/\n");

    /* ファイルのクローズ */
    fclose(fp);

    return EXIT_SUCCESS;
}

実行例

サンプルプログラムの実行結果は以下のようになります.

ファイルのオープンに成功しました.
/*
 普通はファイルに対して書き込みを行うコードを
 ここに書きます.
*/

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.

ファイルのオープン・クローズ