win api 를 이용하는 방법과, VCL을 이용하는 방법입니다.
사실 둘다 같은 것이지만.. 편의성은 VCL이 낫습니다.
실제로 쓰실 때는 help를 보고 OS 별 차이를 한번 볼 필요가 있습니다.
아래 코드는 빌더2009 에서 실험된 것입니다.
#define __ __TEXT
//--------------------------------------------------------------------------
void __fastcall TFormMain::FormCreate(TObject *Sender)
{
// win api로 구하기.
LPCWSTR DirectoryName = __("C:");
ULARGE_INTEGER FreeBytesAvailableToCaller;
ULARGE_INTEGER TotalNumberOfBytes;
ULARGE_INTEGER TotalNumberOfFreeBytes;
BOOL bbb = ::GetDiskFreeSpaceEx(
DirectoryName,
&FreeBytesAvailableToCaller,
&TotalNumberOfBytes,
&TotalNumberOfFreeBytes);
// 실제 쓸수 있는 형태로 변환.
__int64 가용량 = *(__int64*)&FreeBytesAvailableToCaller;
__int64 전체용량 = *(__int64*)&TotalNumberOfBytes;
__int64 남은용량 = *(__int64*)&TotalNumberOfFreeBytes;
// VCL 로 구하기.
bbb = Sysutils::GetDiskFreeSpaceEx(
(wchar_t*)DirectoryName,
가용량,
전체용량,
&남은용량);
// 확인
String ss;
ss.printf(__("%.0f %.0f %.0f"),
(double)가용량,
(double)전체용량,
(double)남은용량);
Caption = ss;
}
//--------------------------------------------------------------------------
|