プログラムは必要に応じてデータを読み書きする必要がある。ファイルの読み書き処理のことを「ファイル入出力」と呼ぶ。
ファイル入力の例
・音楽プレーヤーがMP3を再生
・MS-WORDが文書を開く
・写真ビューアがJPEGを表示
ファイル出力の例
・メモ帳がテキストファイルを保存
・デジカメが写真をメモリーカードに保存
・CDをMP3に変換
手順1:ファイルを開く
手順2:ファイルを読む OR 書く
手順3:ファイルを閉じる ←特に閉じるのを忘れやすいので注意。
それぞれの手順に「標準ライブラリ関数」が用意されている。
■ファイルを開く fopen() 関数
- 例外処理
■ファイルを読み書きする関数
例えば fprintf() 関数は printf() 関数とほぼ同じ使い方になっている。
■ファイルを閉じる fclose() 関数
標準ライブラリ関数に加えて、ファイルそのものを示す変数としてFILE構造体が用意されている
演習1: hellofilewrite.c (ファイル出力の例)
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp; // ファイル構造体
int dt = 12345; // ゲームのスコアと仮定
// 【手順1】ファイルを開く
fp = fopen("report.html","w");// "w" で出力指定
// 例外処理
if(fp == NULL){
printf("出力ファイルを開けません\n");
exit(1);
}
// 【手順2】ファイルに出力
fputs("<html><body>",fp);
fprintf(fp,"score = <b>%d</b>",dt);
fputs("</body></html>",fp);
// 【手順3】ファイルを閉じる
fclose(fp);
return 0;
}
*例外処理とは?
プログラムがファイルを読み書きするために
ファイルを開こうとしても、読み込みや書き込みが禁止
されているなど、失敗する場合がある。処理の失敗を
想定した処理を例外処理と呼ぶ。
演習2: hellofileread.c (ファイル入力の例。教科書287ページリストと同等)
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
char filename[80];
char ss[256];
int count=1;
printf("Filename=");
// ファイル名取得
gets(filename);
// ファイルを開く
if((fp=fopen(filename,"r"))==NULL){
printf("ファイルを開けません\n");
exit(1);
}
// ファイルを行単位で読み込む
while(fgets(ss,256,fp)!=NULL){
printf("%3d %s",count,ss);
count++;
}
// ファイルを閉じる
fclose(fp);
return 0;
}
■実行結果
>hellofileread.exe
Filename=hellofileread.c ←コンソールで指定
1 #include <stdio.h>
2 #include <stdlib.h>
・・・
演習1()と演習2()を作成してメールで提出してください。