ファイル
スポンサーリンク
次のプログラムは,テキストファイル 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;
}
スポンサーリンク