CプログラミングⅡ
ファイル入出力
ファイル入出力とは
ファイルへデータを書き込んだり(出力),ファイルから
データを読み込んだり(入力)する
C言語では、キーボードからの入力、画面への出力と
同じようなコードで、ファイル入出力処理を実現できる
プログラム
ファイル
出力
入力
出力
入力
入出力の基本
ストリーム
プログラム上で様々な装置への入出力を行う機構
様々な入出力装置を統一的な方法で扱うことができる
ハードディスクなどでは ファイルデータによって 入出力が行われるファイル入出力におけるストリームの概念
ファイル
ファイル
更新ストリーム
プログラム
読み込み 書き込み fopen fcloseファイル入出力の基本
ファイル入出力処理の順序
① ファイルのオープン
入出力に使われるストリーム
とファイルとを結びつける
② ファイルを読み書きする
③ ファイルのクローズ
ストリームとファイルとを
切り離す
int main(void) { FILE *fp; fp = fopen("test1.txt", "w"); if(fp == NULL){ printf("ファイルをオープンできません¥n"); return 1; } else { printf("ファイルをオープン¥n"); } /* ファイルの読み書き */ fclose(fp); printf(“ファイルをクローズ¥n"); return 0; }ファイルポインタの宣言
ファイルポインタ
現在,ファイルのどこを読み書きしているのかを指し
示す(管理する)ためのポインタ
ファイルに接続するときには必ず必要
ファイルポインタの宣言
FILE *ポインタ名;
int main(void)
{
FILE *fp;
FILE *fp1, *fp2;
}
複数のファイルを扱いたい場合には
複数のファイルポインタを宣言する
ファイルのオープン(ファイルへの接続)
ファイルに接続する(ファイルをオープンする)
ファイルポインタ = fopen(
"
ファイル名
"
,
"
オープンモード
"
);
fopen関数の戻り値
ファイルのオープンが何らかの原因で失敗した場合,
[NULL] (ヌル)を返す.
if文を使用してファイルのオープンに成功したか失敗
したかを判断し,失敗したときの処理を書いておくこと
が望ましい
ファイルオープンの方法
ファイルのオープンモード
下記の表はfopen命令のモードを示したものである.
用途に対応したモードを設定する必要がある.
モード
意 味
詳 細
r
読み込みモード
ファイルを読み込み用で接続する.
ファイルからデータの読み込みが可能.
w
書き込みモード
ファイルを書き込み用で接続する.
ファイルへのデータの書き込みが可能.
a
追記モード
現在,存在するファイルにデータの追記を行う.
ファイルオープン処理の例
int main(void)
{
FILE *fp;
char filename[21] = "test2.txt";
if((fp = fopen("test1.txt", "w")) == NULL ){
printf("ファイルをオープンできません¥n");
return 1;
}
if((fp = fopen(filename, "r")) == NULL){
printf("ファイルをオープンできません¥n");
return 1;
}
}
ファイル test1.txt を
書き込みモードで
オープン
同時にオープンに
失敗したとき,
プログラム実行を
終了するように
している
文字列 filename[] に
格納されている
ファイル名のファイルを
読み込みモードで
オープン
ファイルのクローズ(ファイルの切断)
fclose( ファイルポインタ );
ファイルクローズの方法
ファイルを切断する(ファイルをクローズ」する)
int main(void)
{
FILE *fp;
if((fp = fopen("test1.txt", "r")) == NULL ){
printf("ファイルをオープンできません¥n");
return 1;
}
fclose(fp);
}
fopen文で接続したストリームは
関数の終了時(プログラム実行終了時)に
fclose文で必ず切断することが望ましい
ファイルへの出力
ファイルへの書き込み
ファイルへデータなどを書き込むには,以下の3つの
命令文(ファイル出力関数)がある
実際には,ストリームを介して
ファイルに書き込んでいる
値
37
文字列
"Fukuoka"
文字列メンバ"Fukuoka"
値メンバ1 値メンバ221.5
15
構造体
fprintf文
fputc文
fputs文
ストリーム
書き込み
fprintf関数によるファイルへの書式付出力
ファイルへの書式付出力
fprintf( ファイルポインタ, "書式付文字列" ,引数1,引数2,…,引数n);
ファイルへの書式付出力
int main(void) { int a = 10; double b = 3.1415926535; FILE *fp; fp = fopen("test.txt", "w"); fprintf(fp, "a = %d b = %4.2lf¥n", a, b); fclose(fp); }
fputs関数によるファイルへの文字列出力
文字列のみを出力する(変数の値などは出力できない)
ファイルへの文字列出力
fputs( "文字列",ファイルポインタ );
ファイルへの文字列出力
int main(void) { FILE *fp; fp = fopen("string.txt", "w"); fputs("Hello World¥n", fp); fclose(fp); }
fputc関数によるファイルへの1文字出力
文字データ(char型データ)1つを出力する
ファイルへの1文字出力
fputc( char型変数, ファイルポインタ );
ファイルへの1文字出力
int main(void) { char ch = 'A'; FILE *fp; fp = fopen("character.txt", "w"); fputc(ch, fp); fputc('¥n', fp); fputc('Z', fp); fputc('¥n', fp); fclose(fp); }例)
int main(void)
{
FILE *fp;
int x = 20, y = 5;
fp = fopen("test.txt", "w");
fprintf(fp, "x:%d y:%d¥n", x, y);
fprintf(fp, "和:%d¥n", x + y);
fprintf(fp, "差:%d¥n", x - y);
fprintf(fp, "積:%d¥n", x * y);
fprintf(fp, "商:%d¥n", x / y);
fclose(fp);
return 0;
}
演算結果の書き込み
ファイルからの入力
ファイルからの読み込み
ファイルからデータなどを読み込むには,以下の3つ
の命令文(ファイル入力関数)がある
実際には,ファイルから
ストリームを介して
データを読み込んでいる
値
37
文字列
"Fukuoka"
fscanf文
fgetc文
fgets文
ストリーム
読み込み
fscanf関数によるファイルからの書式付入力
ファイルからの書式付入力
fscanf( ファイルポインタ, "変換指定" ,引数1のアドレス,… );
ファイルからの書式付入力
int main(void) { int a; double b; FILE *fp = fopen("test.txt", "r"); fscanf(fp, "%d %lf", &a, &b);printf("a = %d b = %4.2¥n", a, b); fclose(fp);