ファイルの入出力

ファイルの入出力

ゲームを作っていると外部のファイルの参照や出力が必要になることが多々あります。

  • テクスチャー
  • モデル
  • 音楽
  • 動画
  • セーブデータ
  • 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
    ファイルを閉じると削除されます。

他にもありますが、概ねこれぐらいで事足りるかと思います。

1 2 3

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です