📄 diskcapacity.txt
字号:
function GetDiskCapacity(Drv: Char; var dskSize,dskFree: Comp;
var errMsg: string): Boolean;
var
TmpDrv: string;
SectorsPerCluster,
BytesPerSector,
NumberOfFreeClusters,
TotalNumberOfClusters,
ErrMode: DWord;
EAX,EDX,ECX,EBX: Comp;
begin
if Drv = #0 then
raise TAPIException.Create('SetDiskCapacity FAILED!');
ErrMode:= SetErrorMode(SEM_FAILCRITICALERRORS);
TmpDrv:= Drv+':\';
dskSize:= 0;
dskFree:= 0;
{$I-}
result:= GetDiskFreeSpace(PChar(TmpDrv),SectorsPerCluster,BytesPerSector,
NumberOfFreeClusters,TotalNumberOfClusters);
{$I+}
if result then
begin
EAX:= SectorsPerCluster; // Convert DWord to Double so it can
ECX:= BytesPerSector; // hold larger disk capacity otherwise
EBX:= NumberOfFreeClusters; // capacity calculation will produce an
EDX:= TotalNumberOfClusters; // error ->> Invalid Math Operation.
{
Or if you do this you'll get Integer Overflow error.
Try if you like!
}
// dskSize:= (SectorsPerCluster*BytesPerSector*TotalNumberOfClusters); ->> Integer Overflow
// dskFree:= (SectorsPerCluster*NumberOfFreeClusters*BytesPerSector); ->> Integer Overflow
dskSize:= (EAX*ECX*EDX);
dskFree:= (EAX*EBX*ECX);
end else
errMsg:= GetLastErrorMsg;
SetErrorMode(ErrMode);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -