10-3 ファイル読み書き

この記事は約3分で読めます。

ファイルからの読み取り

ファイルからデータを読み取るときは、fscanf関数が使えます。

int fscanf(FILE *fp,const char *format,...);

第一引数にファイルポインタを指定します。第2引数以降は通常のscanf関数と同じです。

もう一つ関数を紹介します。

int fgetc(FILE *fp);

この関数は、ファイルから一文字読み取り、int型に変換して返します。ファイルの最後に到達した場合は、EOFを返します。EOFとはEnd Of Fileの略で、定数マクロとして定義されています。何文字も読み取りたい場合は、この関数を繰り返し呼び出します。

ファイルへの書き込み

ファイルに書き込む場合は、fprintf関数を用います。

int fprintf(FILE *fp,const char *format,...);

printf関数の引数にファイルポインタが加わっただけです。第一引数にファイルポインタを指定し、第2引数以降はprintf関数と同じようにフォーマット指定子を用いて文字列や数値などを指定します。

puts関数のファイル版として、fputs関数もあります。

int fputs(const char *string,FILE *fp);

こちらは、第2引数にファイルポインタが加わりました。ちなみに、fputs関数はputs関数と違って末尾に改行しません。

サンプルコード

まずはファイルに書き込むプログラムを作ります

#include <stdio.h>
#include <stdlib.h>
int main(void){
	char fname[500];
	FILE *fp;
	puts("ファイルのパスを入力してください");
	scanf("%s",fname);
	fp=fopen(fname,"w");
	if (fp==NULL){
		puts("ファイルを開けません。");
		return -1;
	}
	fputs("Hello,world\n",fp);
	fclose(fp);
	return 0;
}

実行結果1

ファイルのパスを入力してください
test.txt

test.txtの内容

Hello,world

このように、ファイルに文字を書き込めました。

次に、ファイルを開いて中身を読み取り、画面に表示します。

test.txtの内容

Hello,world
#include <stdio.h>
#include <stdlib.h>
int main(void){
	char fname[500];
	int data;
	FILE *fp;
	puts("ファイルのパスを入力してください");
	scanf("%s",fname);
	fp=fopen(fname,"r");
	if (fp==NULL){
		puts("ファイルを開けません。");
		return -1;
	}
	do {
		data=fgetc(fp);
		printf("%c",data);
	} while(data!=EOF);
	fclose(fp);
	return 0;
}

実行結果

ファイルのパスを入力してください
test.txt
Hello,world

まとめ

標準入出力に対して操作を行うprintf関数、scanf関数に対応してfprintf関数、fscanf関数があり、これらを使うとファイルに対して入出力ができる。

コメント

タイトルとURLをコピーしました