6.ファイルを入力
入力するデータがファイルにある時に取り込む方法についてです。
下記の18行を打ち込み後、コンパイルしてから実行します。
実行する前に注意です。実行するディレクトリに任意の文字を記述したファイルを
sample.datとして作成しておいて下さい。
#include <stdio.h>
main()
{
char buf[8];
FILE *fp;
fp = fopen("sample.dat", "r");
if (fp == NULL) {
printf("ファイルがオープン出来ません");
return;
}
fgets(buf, 4, fp);
if ((feof(fp) != NULL) || (ferror(fp) != NULL)) {
printf("ファイルのリードでエラーです");
return;
}
printf("ファイルの中は[%s]です \n", buf);
fclose(fp);
}
いかがですか?
ファイルに記述された内容が表示されましたか?
もし、ファイルに一行目に3文字以内で複数行書いてある方は表示された文字列に
改行まで含まれているでしょう。
また、1行目に5バイト以上書いてある方は最初の4文字が表示されたでしょう。
今回の学習項目
1)FILE *fp
ファイルを扱う時に必要な情報を格納する為のポインタを定義する時の型が
FILEです。
fpは何でもかまいません。
2)fopen
ファイルを使用する前に読み込みなのか書き込みなのかを指定する関数です。
読み込みは"r"、書き込みは"w"です。
既存のファイルを"w"でオープンすると中身は消去されてしまうので注意
が必要です。
3)fgets
改行又はeof(ファイルの終わり)又は指定されたサイズまでを指定された
エリアへ読み込みます。
改行まで読み込まれた時は文字列の最後に改行が入ってしまうので、そのまま
文字列を使用する時は注意が必要です。
試しにprintf("[%s]", buf);で表示してみると改行後に]が表示されるので
よくわかると思います。
4)feof
eofを調べる関数です。
戻り値が0以外の時にeofを表します。
5)ferror
直前のファイル関連の関数でエラーの有無を調べる関数です。
戻り値が0以外の時にエラーを表します。
また、戻り値によりエラーの内容が解るのですが、今回は説明を省きます。
6)fclose
オープンに対してファイル操作の終了を宣言する関数です。
これによりファイル操作の為に確保されたエリアを開放します。
一つのプログラムで多数のファイルを使う時のfcloseを忘れると、同時に使用
出来るファイル数を超えてしまいまう事がありますので注意しましょう。