【C言語】ファイル読み書きを頑張るぞ
こんばんは葛の葉です。今日もC言語です。
FILE型を使うんざ
# include <stdio.h>
これが宣言されていればFILE
型は使えるようになってます。ポインタ変数を渡して作成しましょう。FILE
型で作ったポインタをfopen
関数に渡してあげるとファイルが読み込まれるようです。
#include <stdio.h> int main (){ FILE *filep; filep = fopen("text.txt", "r"); }
fopen
関数の第二引数に"r"
としていますが、これはReadOnlyの意味のようです。ファイル読み込み時のモードがあって、今回は読み取り専で開いているということです。
#include <stdio.h> int main (){ FILE *filep; char str[255]; filep = fopen("text.txt", "r"); while(fgets(str, 255, filep) !=NULL){ printf("%s", str); } fclose(filep); return 0; }
WHILE文でfget
関数を回しています。これはfilepポインター変数から一行256バイト分をstr
変数に代入しろという関数になります。フォルダの値が何もない場合はNULL
を返します。つまり、最後の行が何もない場合はNULL
を返します。NULL
の場合はWHILEから抜けるように条件を記載しています。
Render unto Caesar. Parable of the Good Samaritan.
text.txtは適当な文章を入れときます。あとはいつものようにコンパイルしてみましょ。
gcc ./file.c ./a.out Render unto Caesar. Parable of the Good Samaritan.
書き込みもしてみよう
fopen
関数の第二引数を"w"
とします。これはWriteの意味のようです。また、書き込むための関数であるfputs
関数を使います。
#include <stdio.h> int main (){ FILE *filep; char str[255] = "パイロキネシス\n"; filep = fopen("text.txt", "w"); if (filep == NULL) { printf("ファイルがないよ\n"); } else { printf("%sと書き込みます。\n", str); fputs(str, filep); } fclose(filep); return 0; }
fileが見つからない場合はNULLになるので、if文でNULLかそうでないかを判定します。NULLでないのならfputs
関数を使用します。fputs(文字列, FILEポインター)
とします。
$ gcc file2.c $ ./a.out パイロキネシス と書き込みます。
text.txtの中身はこのようになります。
パイロキネシス
前回まで存在していた2文章が消えました。どこいったんだ?
追記してみる
fopen
関数の第二引数に"a"
としています。これはAddの意味のようです。また効果がわかりやすいようにstrの値も変更します。
#include <stdio.h> int main (){ FILE *filep; char str[255] = "クリオキネシス\n"; filep = fopen("text.txt", "a"); if (filep == NULL) { printf("ファイルがないよ\n"); } else { printf("%sと書き込みます。\n", str); fputs(str, filep); } fclose(filep); return 0; }
実行すると以下のようになります。
パイロキネシス クリオキネシス