f_getfree

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

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

引数

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

戻り値

FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT

解説

論理ドライブ上の空きクラスタ数を取得します。返されたファイル・システム・オブジェクトの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

戻る