[C++ Builder] ドライブの空き容量を取得する
static HINSTANCE kernelHandle;
bool (WINAPI *pGetDiskFreeSpaceEx)(LPCTSTR , ULARGE_INTEGER *,ULARGE_INTEGER *,
 ULARGE_INTEGER *);

//GetDiskFreeSpaceExのアドレスを取得する関数
int ModuleLoads()
{
    kernelHandle = LoadLibraryEx("KERNEL32.DLL", NULL, 0);
    if(kernelHandle == NULL){
        return(1);
    }else{
        pGetDiskFreeSpaceEx =
                (bool (WINAPI *)(LPCTSTR ,
                PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER))
                GetProcAddress(kernelHandle, "GetDiskFreeSpaceExA");
        if( pGetDiskFreeSpaceEx == NULL ){
            FreeLibrary( kernelHandle );
            kernelHandle = NULL;
            return(1);
        }
    }
    return(0);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        //64Bit UNSIGNED INTEGER
        ULARGE_INTEGER  UserFree;
        ULARGE_INTEGER  DiskTotal;
        ULARGE_INTEGER  DiskFree;

    //GetDiskFreeSpaceExをロードする
    if( ModuleLoads() ){
        ShowMessage( "Error ModuleLoads" );
        return;
    }

    if( pGetDiskFreeSpaceEx ){
        //ディスク容量を取得する
        pGetDiskFreeSpaceEx( "C:\\", &UserFree, &DiskTotal, &DiskFree );
        ShowMessage( Format("利用可能容量は%.2fGBです。",ARRAYOFCONST((
                    (((UserFree.QuadPart/1024.0)/1024.0)/1024.0)))) );
    }
    if( kernelHandle ) FreeLibrary( kernelHandle );
}
      

・インターネット上の情報や書籍の内容を一部参考に作成してます。
・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。
・記述内容に問題点や改善点がありましたらこちらまでお願いします。

サンプル集の一覧に戻る