SakAwans
Новичок
В: Я хочу, чтобы DefaultDir был выбран на жестком диске с максимальным свободным пространством, как мне этого добиться?
O: что-то вроде этого
Q: I want DefaultDir to be selected on the hard disk drive with maximum free space how can i achieve that?
A: something like this
Это не работает для расширенной версии inno 5.5.1 ee2.
This doesn't work for inno enhanced edition 5.5.1 ee2
O: что-то вроде этого
Q: I want DefaultDir to be selected on the hard disk drive with maximum free space how can i achieve that?
A: something like this
Это не работает для расширенной версии inno 5.5.1 ee2.
This doesn't work for inno enhanced edition 5.5.1 ee2
[Setup]
DefaultDirName={code:GetDiskWithMostFreeSpace}\Games\Grand Theft Auto V
DefaultDirName={code:GetDiskWithMostFreeSpace}\Games\Grand Theft Auto V
Код:
const
DRIVE_NO_ROOT_DIR = 1;
DRIVE_FIXED = 3;
function GetDriveType(lpRootPathName: string): UInt;
external 'GetDriveTypeW@kernel32.dll stdcall';
function GetDiskWithMostFreeSpace(Param: string): string;
var
I: Integer;
D: string;
MostFree: Int64;
Free, Total: Int64;
T: UInt;
begin
Result := '';
MostFree := -1;
for I := Ord('A') to Ord('Z') do
begin
D := Chr(I) + ':\';
T := GetDriveType(D);
if T = DRIVE_NO_ROOT_DIR then
begin
Log(Format('Disk %s does not exist', [D]));
end
else
begin
Log(Format('Disk %s is of type %d', [D, T]));
if T = DRIVE_FIXED then
begin
if not GetSpaceOnDisk64(D, Free, Total) then
begin
Log(Format('Cannot obtain free disk space on %s', [D]));
end
else
begin
Log(Format('Free disk space on %s is %d', [D, Free]));
if Free > MostFree then
begin
MostFree := Free;
Result := D;
end;
end;
end;
end;
end;
if Result = '' then
begin
RaiseException('Did not find any disk');
end;
Log(Format('Selected disk %s', [Result]));
end;
Последнее редактирование: