ボリューム上の空き領域のサイズを取得します。
FRESULT f_getfree ( const TCHAR* path, /* [IN] 対象ドライブを指定します */ DWORD* nclst, /* [OUT] 空きクラスタ数を格納する変数へのポインタ */ FATFS** fatfs /* [OUT] ファイル・システム・オブジェクトを指すポインタへのポインタ */ );
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_NOFSINFOオプションでマウント後の初回は必ずフルFATスキャンをするように構成することもできます。
_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("%10lu KiB total drive space.\n%10lu KiB available.\n", tot_sect / 2, fre_sect / 2);