Go Back   FileForums > Game Backup > PC Games > PC Games - CD/DVD Conversions > Conversion Tutorials
Register FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 24-02-2016, 02:25
JRD!'s Avatar
JRD! JRD! is offline
Registered User
 
Join Date: Sep 2015
Location: Matrix
Posts: 274
Thanks: 225
Thanked 600 Times in 168 Posts
JRD! is on a distinguished road
Inno Setup 5.5.1 limitation

Hi dudes,

I have a little problem, I want to get the weight of greater than +2Gb file with Inno Setup 5.5.1 ee2, I try many things without success, can someone help me ?

Many thanks!

Example:

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

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

[_Code]
const
    // Some constants for CreateFile ().
    GENERIC_READ           = $80000000;
    GENERIC_WRITE          = $40000000;
    GENERIC_EXECUTE        = $20000000;
    GENERIC_ALL            = $10000000;
    FILE_SHARE_READ        = 1;
    FILE_SHARE_WRITE       = 2;
    FILE_SHARE_DELETE      = 4;
    CREATE_NEW             = 1;
    CREATE_ALWAYS          = 2;
    OPEN_EXISTING          = 3;
    OPEN_ALWAYS            = 4;
    TRUNCATE_EXISTING      = 5;
    FILE_READ_ATTRIBUTES   = $80;
    FILE_WRITE_ATTRIBUTES  = $100;

    // General Win32.
    INVALID_HANDLE_VALUE   = -1;

function CloseHandle (hHandle: THandle): Boolean;
  external '[email protected] stdcall';

function CreateFile (
    lpFileName             : String;
    dwDesiredAccess        : Cardinal;
    dwShareMode            : Cardinal;
    lpSecurityAttributes   : Cardinal;
    dwCreationDisposition  : Cardinal;
    dwFlagsAndAttributes   : Cardinal;
    hTemplateFile          : Integer
): Integer;
 external '[email protected] stdcall';

function GetFileSize (hFile: THandle; var lpFileSizeHigh: Integer): Integer;
  external '[email protected] stdcall';

function GetTheFileSize (FileName: String): Integer;
var
    hFile:  THandle;
    iSize:  Integer;
    hSize:  Integer;
begin
    hFile := CreateFile (FileName,
        GENERIC_READ,// Desired access.
        FILE_SHARE_READ + FILE_SHARE_WRITE,
        0,                // Security attributes.
        OPEN_EXISTING,
        FILE_ATTRIBUTE_TEMPORARY,
        0);
    if (INVALID_HANDLE_VALUE = hFile) then
    begin
        Result := 0;
        Exit;
    end;
    iSize := GetFileSize (hFile, hSize);
    CloseHandle (hFile);
    Result := iSize;
end;

function InitializeSetup():Boolean;
var
  FileSize: integer;
begin
  FileSize := GetTheFileSize(ExpandConstant('{#FileSize}'));
  MsgBox(IntToStr(FileSize), mbInformation, mb_OK);
  Result := False;
end;
Reply With Quote
Sponsored Links
  #2  
Old 24-02-2016, 02:35
JRD!'s Avatar
JRD! JRD! is offline
Registered User
 
Join Date: Sep 2015
Location: Matrix
Posts: 274
Thanks: 225
Thanked 600 Times in 168 Posts
JRD! is on a distinguished road
This example return INVALID_HANDLE_VALUE, how to fix it?

THANKS!
Reply With Quote
  #3  
Old 24-02-2016, 02:39
JRD!'s Avatar
JRD! JRD! is offline
Registered User
 
Join Date: Sep 2015
Location: Matrix
Posts: 274
Thanks: 225
Thanked 600 Times in 168 Posts
JRD! is on a distinguished road
This fix it but return negative value

#ifdef UNICODE
external '[email protected] stdcall';
#else
external '[email protected] stdcall';
#endif
Reply With Quote
  #4  
Old 24-02-2016, 07:11
JRD!'s Avatar
JRD! JRD! is offline
Registered User
 
Join Date: Sep 2015
Location: Matrix
Posts: 274
Thanks: 225
Thanked 600 Times in 168 Posts
JRD! is on a distinguished road
Solved, close this post!

Thanks moderator
Reply With Quote
  #5  
Old 24-02-2016, 07:58
lolaya lolaya is offline
Banned
 
Join Date: Jul 2011
Location: still life
Posts: 138
Thanks: 156
Thanked 38 Times in 29 Posts
lolaya is on a distinguished road
lol
Reply With Quote
  #6  
Old 25-04-2018, 07:38
julenza julenza is offline
Registered User
 
Join Date: Apr 2018
Location: italy
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
julenza is on a distinguished road
you have to write DiskSpanning = yes before setup and the problem will be solved

you have to write DiskSpanning = yes before setup and the problem will be solved.

Hi Giuseppe.

Quote:
Originally Posted by JRD! View Post
Hi dudes,

I have a little problem, I want to get the weight of greater than +2Gb file with Inno Setup 5.5.1 ee2, I try many things without success, can someone help me ?

Many thanks!

Example:

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

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

[_Code]
const
    // Some constants for CreateFile ().
    GENERIC_READ           = $80000000;
    GENERIC_WRITE          = $40000000;
    GENERIC_EXECUTE        = $20000000;
    GENERIC_ALL            = $10000000;
    FILE_SHARE_READ        = 1;
    FILE_SHARE_WRITE       = 2;
    FILE_SHARE_DELETE      = 4;
    CREATE_NEW             = 1;
    CREATE_ALWAYS          = 2;
    OPEN_EXISTING          = 3;
    OPEN_ALWAYS            = 4;
    TRUNCATE_EXISTING      = 5;
    FILE_READ_ATTRIBUTES   = $80;
    FILE_WRITE_ATTRIBUTES  = $100;

    // General Win32.
    INVALID_HANDLE_VALUE   = -1;

function CloseHandle (hHandle: THandle): Boolean;
  external '[email protected] stdcall';

function CreateFile (
    lpFileName             : String;
    dwDesiredAccess        : Cardinal;
    dwShareMode            : Cardinal;
    lpSecurityAttributes   : Cardinal;
    dwCreationDisposition  : Cardinal;
    dwFlagsAndAttributes   : Cardinal;
    hTemplateFile          : Integer
): Integer;
 external '[email protected] stdcall';

function GetFileSize (hFile: THandle; var lpFileSizeHigh: Integer): Integer;
  external '[email protected] stdcall';

function GetTheFileSize (FileName: String): Integer;
var
    hFile:  THandle;
    iSize:  Integer;
    hSize:  Integer;
begin
    hFile := CreateFile (FileName,
        GENERIC_READ,// Desired access.
        FILE_SHARE_READ + FILE_SHARE_WRITE,
        0,                // Security attributes.
        OPEN_EXISTING,
        FILE_ATTRIBUTE_TEMPORARY,
        0);
    if (INVALID_HANDLE_VALUE = hFile) then
    begin
        Result := 0;
        Exit;
    end;
    iSize := GetFileSize (hFile, hSize);
    CloseHandle (hFile);
    Result := iSize;
end;

function InitializeSetup():Boolean;
var
  FileSize: integer;
begin
  FileSize := GetTheFileSize(ExpandConstant('{#FileSize}'));
  MsgBox(IntToStr(FileSize), mbInformation, mb_OK);
  Result := False;
end;
Reply With Quote
  #7  
Old 26-04-2018, 06:34
Siber Pro's Avatar
Siber Pro Siber Pro is offline
Registered User
 
Join Date: Dec 2016
Location: Afghanistan
Posts: 64
Thanks: 113
Thanked 20 Times in 7 Posts
Siber Pro is on a distinguished road
Answer

Why You Do Not Making Like This?
Attached Images
File Type: jpg Untitled.jpg (11.1 KB, 240 views)
Reply With Quote
  #8  
Old 06-05-2018, 12:44
JRD!'s Avatar
JRD! JRD! is offline
Registered User
 
Join Date: Sep 2015
Location: Matrix
Posts: 274
Thanks: 225
Thanked 600 Times in 168 Posts
JRD! is on a distinguished road
Quote:
Originally Posted by julenza View Post
you have to write DiskSpanning = yes before setup and the problem will be solved.

Hi Giuseppe.
Thank you but it has nothing to do with diskspanning, this is because inno setup 5.5.1 does not integrate the type of variable Int64, so limited to the max value of an integer (2 ^ 32) -1 bytes.
The problem is getting around by reviewing the result in megabytes.
__________________
Practice makes perfect.
Reply With Quote
  #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)
  #10  
Old 12-05-2018, 13:34
JRD!'s Avatar
JRD! JRD! is offline
Registered User
 
Join Date: Sep 2015
Location: Matrix
Posts: 274
Thanks: 225
Thanked 600 Times in 168 Posts
JRD! is on a distinguished road
I had worked around the problem differently, well done for the "Size64" function, I would not have thought of this technique. 2 * (MaxInt +1), Thank you!
__________________
Practice makes perfect.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
BlackBox v2 y_thelastknight Conversion Tutorials 567 11-03-2025 07:16
INNO TROUBLESHOOT - Tutorials and Answers about INNO Setup REV0 Conversion Tutorials 129 21-05-2021 05:51
Inno Setup: Additional Libraries altef_4 Conversion Tutorials 50 21-10-2020 09:59
Useful Dll for Inno Setup users peterf1999 Conversion Tutorials 88 01-12-2017 16:00
INNO TUTORIAL - Using Unicode and ANSI Versions of INNO Setup REV0 Conversion Tutorials 51 26-03-2015 06:57



All times are GMT -7. The time now is 23:19.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
FileForums @ https://fileforums.com