ファイル読み書き
著) 2012年度ソフト班長
ランキング機能や設定の変更などで、案外使うファイルの入出力。ゼミで触れる時間が(例年)ないので、このページにまとめます。C言語的な書き方とC++的な書き方の2種類を紹介します。
ランキング機能や設定の変更などで、案外使うファイルの入出力。ゼミで触れる時間が(例年)ないので、このページにまとめます。C言語的な書き方とC++的な書き方の2種類を紹介します。
はじめに
DXライブラリのリファレンスにはファイルを読み込む関数がありますが、書き込む関数はリファレンスに掲載されていません。(非公開関数にあるかもしれませんが。)というわけで、DXライブラリを用いてゲーム作成をする場合、CまたはC++の標準ライブラリの機能を用いてファイルの読み書きを行うのが標準的なやり方となります。
C言語的な書き方
C言語でファイル入出力を行う時は、fopen関数で開いて、中身を読み取った後、fclose関数で閉じるのが普通です。(要stdio.h)。恐らく大学の授業でも、ファイルの入出力ではfopenとfcloseを使うことが多いでしょう。しかし、Visual C++では、セキュリティ上の観点から fopen 関数などを使用するのは推奨されていません。かわりに、セキュリティが強化されたfopen_s関数などを使用するのが推奨されています。fopenとfopen_sの基本的な使い方は変わらないのですが、戻り値が違うなどの細かい違いがあるので、使用する際は注意してください。
以下は、半角スペースで区切られた4つの数字が書かれたファイル「file.txt」を読み込み、書かれた数字を全て2倍にして書き込むコードの一部です。なお、DXライブラリは既にstdio.hをインクルードしているので、fopen_sまたはfopenを使うために改めてstdio.hをインクルードする必要はありません。
int a, b, c, d; FILE *fp; fopen_s( &fp, "./file.txt", "r" ); //注 fopenの場合は, fp = fopen( "./file.txt". "r" );となり、引数と戻り値が異なるので注意。 if( fp == NULL ){ // 読み込み失敗時の処理 fclose( fp ); }else{ fscanf( fp, "%d%d%d%d", &a, &b, &c, &d ); fclose( fp ); a *= 2; b *= 2; c *= 2; d *= 2; FILE *fp2; fopen_s( &fp2, "./file.txt", "r" ); //注 fopenの場合は, fp = fopen( "./file.txt". "r" );となり、引数と戻り値が異なるので注意。 if( fp2 == NULL ){ //ファイルの書き込みに失敗したときの処理 }else{ fprintf( fp, "%d %d %d %d", a, b, c, d ); } fclose( fp );}
スタブ