ファイルの入出力
ゲームを作っていると外部のファイルの参照や出力が必要になることが多々あります。
- テクスチャー
- モデル
- 音楽
- 動画
- セーブデータ
- etc…
様々な用途で外部ファイルの参照や出力が必要になってきます。
今回はそう言った場合に使用するファイルの入出力の基本を記載していきます。
ファイルとは?
PC上に存在しているファイルは基本的にバイナリ(数値)データとして存在しています。
そのバイナリデータを駆使してテクスチャー、モデル、音楽といったデータを形作っています。
ファイルの読み込み
バイナリファイルの操作の方法はいくつかあります。
今回はCreateFileを使った方法を記載していきます。
CreateFile
CreateFileを呼び出すことでPC上のファイルを開くことができます。
又、ファイルを開くときには開き方の指定する必要があります。
HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );
- lpFileNameはファイルのパスを指定します。
- dwDesiredAccessはアクセスタイプを指定します。
- dwShareModeはファイルの共有方法(他のファイルが開いている場合の挙動)を指定します。
- lpSecurityAttributesはNULLで構いません。
- dwCreationDispositionはファイルの有無による生成方法を指定できます。
- dwFlagsAndAttributesはファイルの属性やフラグを指定します。
- hTemplateFileはNULLで構いません。
この関数は成功するとファイルハンドルを返します。
失敗した場合には INVALID_HANDLE_VALUE が返ってきます。
アクセスタイプ
アクセスタイプは主に読み込みと書き込みの2種類です。
読み込み時は GENERIC_READ を指定します。
書き込み時は GENERIC_WRITE を指定します。
※bitフラグなので複数を同時に指定することもできます。
共有モード
共有モードは他のアプリケーションなどで使用されている場合の挙動の設定になります。
- FILE_SHARE_READ
読み込みでアクセスされている場合でオープンを許可する - FILE_SHARE_WRITE
書き込みでアクセスされている場合でオープンを許可する - FILE_SHARE_DELETE
削除でアクセスされている場合でオープンを許可する
※bitフラグなので複数を同時に指定することもできます。
生成方法
生成方法の指定によってファイルの有無による開いた時の挙動を指定できます。
- CREATE_NEW
ファイルが存在しない場合は生成する。
既に存在する場合は失敗する。 - CREATE_ALWAYS
ファイルを存在しない場合は生成する。
既に存在する場合は上書きする。 - OPEN_EXISTING
ファイルが存在する場合は開く。
存在しない場合は失敗する。 - OPEN_ALWAYS
ファイルが存在する場合は開く。
存在しない場合は作成する。
ファイルの属性
- FILE_ATTRIBUTE_NORMAL
特に属性はありません。単独で指定します。 - FILE_ATTRIBUTE_HIDDEN
隠しファイル - FILE_ATTRIBUTE_READONLY
読み取り専用 - FILE_ATTRIBUTE_SYSTEM
システムファイル - FILE_ATTRIBUTE_TEMPORARY
テンポラリファイル - FILE_FLAG_DELETE_ON_CLOSE
ファイルを閉じると削除されます。
他にもありますが、概ねこれぐらいで事足りるかと思います。