ファイル操作の基本は
この3つです。
ファイル操作用関数の使い所とエラー処理を状況に応じて加えていきます。
ファイル操作用関数はいくつか種類があり、それら全ての関数はfopenによって開いたファイルポインタを使わない限り失敗します。(stdoutなど例外もありますが)
では実際のプログラムソースを見てみましょう。
/////////////サンプル1//////////////////////////////////
#include <stdio.h>
int main()
{
FILE *fp;/*ファイルポインタ*/
int years=2004;
fp = fopen("test.txt","w"); /*ファイルを開きます。*/
if(fp==NULL)/*エラー処理*/
{
printf("ファイルが読み込めません。\n");
return 0;
}
fprintf(fp,"Hello Densanbu\n");/*ファイルに書き込みます。*/
fprintf(fp,"%d年\n",years);
fclose(fp); /*ファイルを閉じます。*/
return 0;
}
///////////////////////////////////////////////////////
コンパイルして実行しても何も変化が見られませんね?
けど、ソースファルがあるフォルダを開いてみてください。
"text.txt"とというファイルを開くと
Hello Densanbu
2004年
と書き込まれていれば成功です。
始めのFILE *fpですが、これはファイルポインタ(FILE構造体のポインタ)で、 これを使ってファイル操作をします。
次にfopen()ですが、次のようになっています。
FILE *fopen(const char *ファイル名,const char *オープンモード)
一つ目の引数:
ファイル名は""で括ったファイル名でもいいですし、char型の配列にファイル名を入れたものでもいいです。
二つ目の引数:
オープンモードですが、次の表を参考にしてください。
処理 | モード | ファイルがある場合 | ファイルがない場合 |
---|---|---|---|
読み出し | r | ○ | × |
書き込み | w | ○上書きする。 | ○新規作成 |
追記 | a | ○ | ○新規作成 |
読み書き | r+ | ○ | × |
読み書き | w+ | ○上書きする。 | ○新規作成 |
(○→開ける、×→開けない)
読み出しモードで開かれたファイルはfscanfやfreadなどのファイルに読み込む関数は使えますが、書き込む関数は使えません。
逆に書き込み・追記モードではfprintfやfwriteなどファイルに書き込める関数は使えますが、読み込む関数は使えません。
そして読み書きモードでは両方できます。
通常は[rで読み込み、wで書き込み]この二つさえ知っておけば十分です。
サンプル1ではオープンモードにw、つまり書き込みモードで開いていますね。
このfopenの戻り値が、ファイルポインタになるのでfpに格納しておきます。
開けなかった場合NULLが返るため、if(fp==NULL)でチェックしておきます。
もっとも、wで開いた場合そのようなことはめったにないと思われます。
次にファイル操作用の関数としてfprintfを使っています。
この関数はprintfとほとんど同じ使い方ができるので大変便利です。
一番目の引数がファイルポインタなだけで他はprintfと同じです。
念のため、fprintfの説明も用意しておくのでよかったらみてください。
最後にfcloseで使ったファイルを閉じます。