ファイル

スポンサーリンク

次のプログラムは,テキストファイル hoge.txt に文字列を書き込むプログラムです。

#include <stdio.h>

int main(void)
{
    FILE *fp;  /* ファイルポインタ */

    fp = fopen("hoge.txt", "w");  /* ファイルを書き込み用に開く */

    if (fp == NULL) { /* エラー処理 */ }

    fprintf(fp, "This is some sample text.\n");

    fclose(fp);  /* ファイルを閉じる */

    return 0;
}

ファイル入出力関数

ファイル入出力用の関数には,次のようなものがあります。いずれも stdio.h に宣言されています。

説明入力出力
1 文字int getc(fp)fputc(ch, fp)
1 行fgets(str, len, fp)fputs(str, fp)
書式付きfscanf(fp, fmt, ...)fprintf(fp, fmt, ...)

ファイルポインタ

FILE *fp と宣言された fp は,ファイルを識別するために必要な変数で,ファイルポインタと呼ばれます。
FILE は stdio.h に定義されている構造体です。

定義済のファイルポインタとして,次のようなものがあります。
fprintf(stdout, ...) は,printf(...) と同義です。

ファイルポインタストリーム
stdin標準入力
stdout標準出力
stderr標準エラー出力

fopen/fclose

ファイルのオープンには fopen 関数を使います。
返り値はファイルポインタで,失敗時には NULL が返されます。

FILE *fopen(
    char *filename,  /* ファイル名 */
    char *mode       /* モード */
)

第 2 引数に指定するモードには,次のようなものが利用できます。
デフォルトはテキストモードですが,"b" を付加するとバイナリモードで編集できます。

モード説明
"r"ファイルを読み取り用に開く
"w"ファイルを作成し書き込む (既存のファイルは破棄)
"a"ファイルを追記用に開くか,ファイルを作成して書き込む
"r+"ファイルを読み取り及び書き込み用に開く
"rb", "wb" などバイナリモードで編集する

ファイルをクローズするには,fclose 関数を呼び出します。

getc 関数

getc 関数は,ファイルから 1 文字分を読み込む関数です。
1 回呼び出す度に,ファイルのカレントポジションが 1 文字分移動します。
カレントポジションがファイルの終端にある時に呼び出すと,定義済の定数 EOF が返されます。

getc 関数の返り値の型は,char 型でなく int 型です。
これは,char 型で表せない範囲にある値が返される可能性がためです (EOF など)。

次のプログラムは,テキストファイル hoge.txt を読み込んで,その内容を表示するプログラムです。

#include <stdio.h>

int main(void)
{
    FILE *fp;
    int c;

    if ((fp = fopen("hoge.txt", "r")) == NULL) { /* エラー処理 */ }

    while ((c = getc(fp)) != EOF)
        putchar(c);

    fclose(fp);

    return 0;
}
スポンサーリンク