diskcapacity.txt
来自「show disk capacity for large drive in de」· 文本 代码 · 共 42 行
TXT
42 行
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 + =
减小字号Ctrl + -
显示快捷键?