ファイルからデータを読み込んだり,ファイルに対してデータを書き出したりする方法です.
今回は1バイトづつ入出力する方法です.
基本的なこととして理解しておくことがあります.
それは,「ファイルに格納されているデータは1バイトづつのデータが直線的に並んでいる」
ということです.
つまりファイルからデータを読み込む際,ファイルの先頭から末尾にかけて
1バイトづつデータを取り出すという作業になります.
同様に,ファイルに対してデータを出力する際,ファイルの先頭から末尾にかけて
1バイトづつデータを書き込むことになります.
ストリームという概念
順番にデータを入出力する対象をストリームと呼びます.
順番にデータがもたらされる入力を「入力ストリーム」,順番にデータを書き込む形の出力を
「出力ストリーム」と呼ぶことがあります.
【ファイルから入力する例】
ファイルから1バイトづつデータを読み込んで,それを次々と標準出力(コマンド画面)に表示するプログラムの例です.
まず次のような内容のテキストファイル “InputFile” があると仮定します.
This is a sample text data.
このファイルから1バイトづつデータを読み込んで,それを標準出力に表示するプログラム “FileTest01.c” を次に示します.
#include
#define TRUE -1
#define FALSE 0
int main()
{
FILE *fi;
int c;
fi = fopen( "InputFile", "r" );
if ( fi == NULL ) {
printf("InputFile can not be opened!\n");
return(FALSE);
}
printf("Start---\n");
while ( TRUE ) {
c = getc(fi);
if ( feof(fi) ) {
break;
}
putchar(c);
}
printf("End---\n");
fclose(fi);
return(TRUE);
}
【ファイルにデータを書き込む例】
ファイルにデータを書き込む方法について紹介します.
1バイトづつデータを出力する例
#include
#define TRUE -1
#define FALSE 0
int main()
{
FILE *fo;
int c;
fo = fopen( "OutputFile", "w" );
if ( fo == NULL ) {
printf("OutputFile can not be created!\n");
return(FALSE);
}
printf("Start---\n");
for ( c = 97; c < 123; c++ ) {
putc(c,fo);
}
printf("End---\n");
fclose(fo);
return(TRUE);
}
この例では,アルファベット小文字の 'a'〜'z' をファイル "OutputFile" に書き込んでいます.
コマンド画面に出力するようなスタイルで出力する例
#include
#define TRUE -1
#define FALSE 0
int main()
{
FILE *fo;
int c;
fo = fopen( "OutputFile", "w" );
if ( fo == NULL ) {
printf("OutputFile can not be created!\n");
return(FALSE);
}
printf("Start---\n");
fprintf(fo,"This file is created by the program \'FileTest03.c\'.\n");
fprintf(fo,"This is one easy way of output.\n");
printf("End---\n");
fclose(fo);
return(TRUE);
}
このプログラムを実行すると "OutputFile" というファイルが作成され,内容は
This file is created by the program 'FileTest03.c'.
This is one easy way of output.
となります.