ファイルからデータを読み込んだり,ファイルに対してデータを書き出したりする方法です.
今回は1バイトづつ入出力する方法です.
基本的なこととして理解しておくことがあります.
それは,「ファイルに格納されているデータは1バイトづつのデータが直線的に並んでいる」
ということです.
つまりファイルからデータを読み込む際,ファイルの先頭から末尾にかけて
1バイトづつデータを取り出すという作業になります.
同様に,ファイルに対してデータを出力する際,ファイルの先頭から末尾にかけて
1バイトづつデータを書き込むことになります.
ストリームという概念
順番にデータを入出力する対象をストリームと呼びます.
順番にデータがもたらされる入力を「入力ストリーム」,順番にデータを書き込む形の出力を
「出力ストリーム」と呼ぶことがあります.
【ファイルから入力する例】
ファイルから1バイトづつデータを読み込んで,それを次々と標準出力(コマンド画面)に表示するプログラムの例です.
まず次のような内容のテキストファイル “InputFile” があると仮定します.
This is a sample text data. |
このファイルから1バイトづつデータを読み込んで,それを標準出力に表示するプログラム “FileTest01.c” を次に示します.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> #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バイトづつデータを出力する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h> #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” に書き込んでいます.
コマンド画面に出力するようなスタイルで出力する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> #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. |
となります.