ファイル・ディレクトリの指定方法

FatFsモジュールでのファイル、ディレクトリ、ドライブの指定方法はMS-DOSとほぼ同じです。パス名のフォーマットは次の通りです。

 "[論理ドライブ番号:][/]ディレクトリ名/ファイル名"

FatFsモジュールは長いファイル名および8.3形式ファイル名に対応しています。長いファイル名は、_USE_LFN == 1のとき使用可能になります。ディレクトリ・セパレータには / または \ を使用します。論理ドライブ番号は、'0'~'9'の一文字の数字とコロンで指定します。省略した場合は、デフォルト・ドライブ(0またはカレント・ドライブ)が選択されます

標準構成(_FS_RPATH == 0)のときは、全てのオブジェクトがルート・ディレクトリから辿る絶対パスで指定されます。OS指向なカレント・ディレクトリという概念は無く、またドット名("."や"..")は使用できません。パス名先頭のセパレータは無視されます。デフォルト・ドライブ番号は常に0になります。

相対パスを有効(_FS_RPATH == 1)にしたときは、先行するセパレータの有無によって検索開始ディレクトリが変わり、セパレータがある場合はルート・ディレクトリから、無い場合はf_chdir関数で設定されるカレント・ディレクトリからになります。またパス名の指定にドット名が使用できます。デフォルト・ドライブ番号はf_chdrive関数で設定された値となります。

パス名_FS_RPATH == 0_FS_RPATH == 1
file.txtドライブ0のルート・ディレクトリ下のファイルカレント・ドライブのカレント・ディレクトリ下のファイル
/file.txtドライブ0のルート・ディレクトリ下のファイルカレント・ドライブのルート・ディレクトリ下のファイル
ドライブ0のルート・ディレクトリカレント・ドライブのカレント・ディレクトリ
2:ドライブ2のルート・ディレクトリドライブ2のカレント・ディレクトリ
2:file1.txtドライブ2のルート・ディレクトリ下のファイルドライブ2のカレント・ディレクトリ下のファイル
2:/ドライブ2のルート・ディレクトリドライブ2のルート・ディレクトリ
../file.txt無効親ディレクトリ下のファイル
.無効このディレクトリ
..無効カレント・ディレクトリの親ディレクトリ
dir1/..無効カレント・ディレクトリ
/..無効無効(ルート・ディレクトリではドット名は使用不可)


Unicode API

ファイル関数の入出力のうちファイル名やパス名を指定する引数の型は、XCHARで定義されていますが、これらはcharでtypedefされています。そして、_CODE_PAGEで指定されるローカル・コード(SBCSまたはDBCS)の文字列として扱われます。ファイル名入出力をUnicodeとする構成(_USE_LFN != 0で、かつ_LFN_UNICODE == 1)にしたときは、XCHARはワイド文字(unsigned short)に切り替わります。これによりLFNフル対応となり、ローカル・コードにない文字(♥☭❶など)も使用できます。


論理ドライブと物理ドライブの対応

標準構成では、それぞれの論理ドライブは同じ番号の物理ドライブに1:1で結びつけられていて、物理ドライブの先頭の区画がマウントされます。_MULTI_PARTITION == 1を指定すると、論理ドライブに対して個別に物理ドライブ番号・区画を指定できるようになります。この構成では、論理ドライブと区画の対応を解決するためのテーブルを次に示すように定義する必要があります。

例:論理ドライブ0~2を物理ドライブ0(固定ディスク)の3つの基本区画に割り当て、
   論理ドライブ3を物理ドライブ1(リムーバブル・ディスク)に割り当てる場合。

const PARTITION Drives[] = {
    {0, 0},     /* Logical drive 0 ==> Physical drive 0, 1st partition */
    {0, 1},     /* Logical drive 1 ==> Physical drive 0, 2nd partition */
    {0, 2},     /* Logical drive 2 ==> Physical drive 0, 3rd partition */
    {1, 0}      /* Logical drive 3 ==> Physical drive 1 */
};

複数区画指定を使用する場合、次の点に注意しなければなりません。