## f_getfree

論理ドライブ上の未使用クラスタ数を得ます。

    FRESULT f_getfree (
      const TCHAR* Path,       /* 対象ドライブを指定します */
      DWORD* Clusters,         /* 空きクラスタ数を格納する変数へのポインタ */
      FATFS** FileSystemObject /* ファイル・システム・オブジェクトを指すポインタへのポインタ */
    );

#### 引数

Path
  調べる対象の論理ドライブを示すパス名が入った`'\0'`で終わる文字列へのポインタを指定します。
Clusters
  空きクラスタ数を格納する`DWORD`変数へのポインタを指定します。
FileSystemObject
  対象ドライブのファイル・システム・オブジェクトを指すポインタが返されます。

#### 戻り値

FR_OK (0)
  正常終了。`*Clusters`に空きクラスタ数が返されます。
FR_INVALID_DRIVE
  ドライブ番号が不正。
FR_NOT_READY
  メディアがセットされていないなど、物理ドライブが動作不能状態。
FR_DISK_ERR
  ディスク・エラーによる失敗。
FR_INT_ERR
  不正なFAT構造または内部エラーによる失敗。
FR_NOT_ENABLED
  その論理ドライブにワーク・エリアが与えられていない。
FR_NO_FILESYSTEM
  有効なFATボリュームが見つからない。

#### 解説

論理ドライブ上の空きクラスタ数を取得します。返されたファイル・システム・オブジェクトの`csize`メンバがクラスタあたりのセクタ数を示しているので、これを元に実際の空きサイズが計算できます。FAT32ボリュームにおいては、FSINFOセクタの状態によっては不正確な値を返したり、処理に時間がかかったりする可能性があります。

#### 対応情報

`_FS_READONLY == 0`で、且つ`_FS_MINIMIZE == 0`のとき使用可能です。

#### 使用例

        FATFS *fs;
        DWORD fre_clust, fre_sect, tot_sect;

        /* ドライブ1のボリューム情報と空きクラスタ数を得る */
        res = f_getfree("1:", &fre_clust, &fs);
        if (res) die(res);

        /* 全セクタ数と空きセクタ数を計算 */
        tot_sect = (fs->n_fatent - 2) * fs->csize;
        fre_sect = fre_clust * fs->csize;

        /* ドライブサイズと空きサイズの表示 (512バイト/セクタと仮定) */
        printf("%lu KB total drive space.\n"
               "%lu KB available.\n",
               fre_sect / 2, tot_sect / 2);

#### 参照

`FATFS`

戻る