View Single Post
  #9  
Old 07-05-2018, 18:55
Cesar82's Avatar
Cesar82 Cesar82 is offline
Registered User
 
Join Date: May 2011
Location: Brazil
Posts: 1,073
Thanks: 1,814
Thanked 2,302 Times in 786 Posts
Cesar82 is on a distinguished road
Possible solution.

Test this code.
If you need to make a calculation with the value, convert back to an extended type variable using the StrToFloat function.

Code:
#define FileSize "D:\Game\Grand Theft Auto V\x64q.rpf"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[ code]
const
  KFactor = $400; {1024}

function FormatBytes(const Bytes: Extended): String;
var
  Dms: Array of String;
  Amount: Extended;
  Idx: Byte;
begin
  Dms := ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
  Amount := Bytes;
  Idx := 0;
  while Amount > (0.9 * KFactor) do
  begin
    Inc(Idx)
    Amount := Amount / KFactor;
  end;
  if Abs(Amount - Trunc(Amount)) < 0.007 {0.07} then
    Result := Format('%.0f %s', [Amount, Dms[Idx]])
  else
    Result := Format('%.2f %s', [Amount, Dms[Idx]]);
end;

function Size64(Hi, Lo: Longint): Extended;
begin
  Result := Lo;
  if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
  for Hi := (Hi - 1) downto 0 do
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
end;

function GetFileSize(const FileName: String): Extended;
var
  FindRec: TFindRec;
begin
  Result := 0;
  if FindFirst(FileName, FindRec) then
  begin
    try
      if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
    finally
      FindClose(FindRec);
    end;
  end;
end;

function FloatToByte(const Bytes: Extended): String;
begin
  Result := Format('%.0f', [Bytes])
end;

function InitializeSetup(): Boolean;
var
  FileSize: Extended;
begin
  FileSize := GetFileSize(ExpandConstant('{#FileSize}'));

  MsgBox(FormatBytes(FileSize), mbInformation, mb_OK);
  {or use}
  MsgBox(FloatToByte(FileSize), mbInformation, mb_OK);

  Result := False;
end;

Last edited by Cesar82; 07-05-2018 at 20:06. Reason: Added alternative mode using JRD! script file returning value to string
Reply With Quote
The Following User Says Thank You to Cesar82 For This Useful Post:
JRD! (12-05-2018)