では具体的なコードを見ていきましょう。
まずはテキストファイルの書き込み操作から進めます。
プログラムのプロジェクトファイル(.vcxprojファイル)があるフォルダに
asset というフォルダを用意し、その中に sample.txt というテキストファイルを作成してください。
書き込み処理の例題1
この例題では
asset/sample.txt に「text write」という文字列を書き込んで保存する
という事を行います。
大まかな手順は下記のとおりです。
- fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする
- fputs 関数で指定した文字列を、変数fpを利用してファイルに書き込む
- fclose 関数でファイルを閉じる
#include
// エントリー関数
int main(void)
{
// ファイル構造体を扱うポインタ変数宣言
FILE* fp = NULL;
// プロジェクトからの相対パスで asset/sample.txt を書込モードで開く
// asset フォルダが無いと失敗する事に注意する
if(0 == fopen_s(&fp, "asset/sample.txt", "w"))
{
// 文字列を書き込む
fputs("text write", fp);
// 閉じる
fclose(fp);
}
else {
printf("ファイルを開けませんでした");
}
return 0;
}
順にみていきましょう。
①fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする
下記コードがその個所となります。
// ファイル構造体を扱うポインタ変数宣言
FILE* fp = NULL;
// プロジェクトからの相対パスで asset/sample.txt を書込モードで開く
// asset フォルダが無いと失敗する事に注意する
if(0 == fopen_s(&fp, "asset/sample.txt", "w"))
fopen_s 関数でファイルを開く事に成功した場合、戻り値にゼロが戻ってくる事に注意してください。
サンプルでは失敗した場合の対応も行っています。
②fputs 関数で指定した文字列をファイルに書き込む
下記コードがその個所となります。
// 文字列を書き込む
fputs("text write", fp);
fputs 関数で指定した文字列をファイルに書き込みます。
書き込みの開始位置は、変数fpで制御されており、
書き込みが行われると、書き込んだ分だけ開始位置を進めてくれます。
戻り値は成否(成功ならゼロ以上、失敗ならEOF)となります。
③ fclose 関数でファイルを閉じる
下記コードがその個所となります。
// 閉じる
fclose(fp);
ファイルは使い終わると必ず fclose で閉じるようにしてください。
書き込み処理の例題2
この例題では
asset/sample.txt に任意の型の変数の内容を文字列を書き込んで保存する
という事を行います。
大まかな手順は下記のとおりです。
- fopen_s 関数で指定したファイルを指定したモードで開き、変数fpで操作できるようにする
- fprintf 関数で指定したフォーマットで各変数の内容をファイルに書き込む
- fclose 関数でファイルを閉じる
#include
// エントリー関数
int main(void)
{
FILE* fp = NULL;
// プロジェクトからの相対パスで asset/sample.txt を書込モードで開く
if (0 == fopen_s(&fp, "asset/sample_write.txt", "w"))
{
// 文字を入力する
// ※スキャン集合を利用して改行だけ読み取らない、つまり、スキャンを終えるのは改行が来た時だけ
char buffer[100] = {};
scanf_s("%[^\n]", buffer, 100);
// 数字を入力する
int no = 0;
scanf_s("%d", &no);
// 数字を入力する
float value = 0;
scanf_s("%f", &value);
// フォーマットを指定して書き込む
fprintf(fp, "%s, %d, %f", buffer, no, value);
// 閉じる
fclose(fp);
}
else
{
printf("ファイルを開けませんでした");
}
return 0;
}
①と③は同じである為割愛します。
② fprintf 関数で指定したフォーマットで各変数の内容をファイルに書き込む
下記コードがその個所となります。
// フォーマットを指定して書き込む
fprintf(fp, "%s, %d, %f", buffer, no, value);
それぞれ型の違う変数を、フォーマットを指定してファイルに書き込んでいきます。
書き込みの開始位置は、変数fpで制御されており、
書き込みが行われると、書き込んだ分だけ開始位置を進めてくれます。
戻り値には書き込んだ文字数が返ってきます。