# FS_OpenDirectory[W]

## 構文

    #include <nitro/fs.h>

    BOOL FS_OpenDirectory(FSFile *dir, const char *path, u32 mode);
    BOOL FS_OpenDirectoryW(FSFile *file, const u16 *path, u32 mode);

## 引数

dir | ハンドルを格納すべきFSFile構造体
path | ディレクトリのパス名
mode | ディレクトリへのアクセスモード FS_DIRMODE_*のフラグを組み合わせて指定します。

## 返り値

ディレクトリハンドルが正しく開ければTRUEを、失敗すればFALSEを返します。
失敗時の詳細なエラーは`FS_GetResultCode()`で取得することができます。

## 説明

指定したディレクトリのハンドルを開きます。
パス名をShift_JISで指定する場合はFS_OpenDirectory()を、UTF16-LEで指定する場合はFS_OpenDirectoryW()を使用することができ、得られる結果は同じです。
得られたハンドルを使用して`FS_ReadDirectory()`を呼び出すことにより、ディレクトリ内のエントリ情報をひとつずつ列挙することができます。
ハンドルを使用した後は`FS_CloseDirectory()`を呼び出して解放する必要があります。
以下の場合には失敗してFALSEを返します。

- 対象となるアーカイブがディレクトリのオープンに対応できない場合
- 指定したディレクトリが存在しない場合

## 注意

- この関数を割り込みハンドラ(IRQモード)から呼び出すことはできません。
  また、割り込みを禁止したままの状態にあると処理が完了しない場合がある点に注意して下さい。
- 開いたファイルの構造体はシステムリソースに関連付けられるため、 別の構造体にそのままコピーしても情報の移動や複製はできません。 詳細は`FSFile構造体`をご参照ください。

## 参照

`FSFile FSDirectoryEntryInfo FSDirectoryEntryInfoW
FS_ReadDirectory FS_CloseDirectory`

## 履歴

2009/07/29 構造体の値コピーが無保証である旨を追記
2008/09/02 Unicode版の関数について追記。
2008/07/16 失敗時のエラーコード取得に関してFS_GetResultCode()を使用するよう記述を訂正。
2007/09/18 初版