C言語でファイルの入出力
C言語を使ってファイルの入出力を行う際の手順をメモ。大雑把な手順は
- ファイル構造体のポインタ作成
- ファイルをオープン
- 入出力(読み書き)を行う
- ファイルをクローズ
では順番に見ていくことにします。
猫でもわかるC++プログラミング 第2版【電子書籍】[ 粂井 康孝 ] |
ファイル構造体のポインタ作成
構造体はデータ型の一種で複数のデータを格納できるのがポイント。配列と異なるのはメンバのデータ型が違っても使えるという点。
struct タグ名{ データ型1 メンバ名1; データ型2 メンバ名2; : : データ型n メンバ名n; };
という形で宣言する構造体ですがファイル構造体については
FILE *変数名;
と書くだけでOK。なぜならincludeするstdio.hのなかにファイル構造体に関する定義がされているため。とっても便利ですね。
変数名の頭に「*」をつけることでポインタとして作成します。
※その他の構造体は改めて。stdio.h内のファイル構造体に関する定義も改めて。
ファイルのオープン
ファイルを開くのに使うのは「fopen」関数。使い方は
ファイル型のポイント変数 = fopen("ファイル名", "モード");
ファイル名は開きたいファイルの名称を、モードは以下から選択します。
- "r"…読み出し専用
- "w"…書き込み専用
- "a"…追加書き込み専用
- "r+"…読み込みと書き込み
- "w+"…書き込みと読み込み
- "a+"…読み込みと追加書き込み
rとr+は指定したファイルがあれば開く、なければ失敗でNULLを返す。
wとw+は指定したファイルがあれば上書き、なければ新規作成。
aとa+は指定したファイルがあれば最後に追記、なければ新規作成。
読み込みと書き込み
いくつか使う関数があるようなのでさっとまとめ。実例は最後に。
fgets(文字配列,読み取る文字数);
ヌル文字も文字数にカウントするため、実質読み取る文字数は「指定した値-1」。
fgetc(ファイルポインタ);
上のfgetsは指定したバイト分を読み込むが、こちらは1文字と決まっている。
fscanf(ファイルポインタ,指定文字列,変数のアドレス);
ファイルポインタで指定したファイルから文字や数値を入力。
fputs(文字配列,ファイルポインタ);
文字配列に格納されている文字列をファイルポインタで指定したファイルへ書き込む。
fputc(文字,ファイルポインタ);
こちらは1文字をファイルポインタで指定したファイルへ書き込む。
fprintf(ファイルポインタ,書式指定文字列,変数);
書式指定文字列に従い、変数の値をファイルポインタで指定したファイルへ書き込む。
ファイルのクローズ
開いたファイルを閉じるときは
fclose(ファイルポインタ);
先ほどfopenで開いたファイルを閉じる処理になります。
エラー処理
必ずしもファイルを開くことができるという保障はどこにもない(存在しないとか権限がないとか)。
よってエラー処理は必須。よく使われるのは
#include stdlib.h /*必須*/ exit(ステータス);
上記のとおり「stdlib.h」をincludeしておかないと使えないので注意。通常ステータスは「0:正常終了」と「1:異常終了」を使うようす。
ファイル入出力のまとめ
- ファイル構造体のポインタ作成(FILE *変数名;でポインタ作成。要#include stdio.h)
- ファイルを開く(fopen("ファイル名", "モード")にて)
- ファイルの読み込み・書き込みを行う(fgets,fgetcなどを使用)
- ファイルを閉じる(fclose(ファイルポインタ)にて)
- 必要に応じてエラー処理を盛り込む
以上のポイントを踏まえて行う。
あとは実際にソースを動かして実験してみること。
猫でもわかるC++プログラミング 第2版【電子書籍】[ 粂井 康孝 ] |