Ветеран
Сообщения: 1264
Благодарности: 1024
|
Профиль
|
Отправить PM
| Цитировать
Цитата Serega:
FX-DENIS, скрипт будет выглядеть так: »
|
Serega, перевод размера файла в удобочитаемую форму можно возложить на винду, например:
читать дальше »
Код:
[code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
type
FILETIME = record
dwLowDateTime, dwHighDateTime: DWORD;
end;
WIN32_FILE_ATTRIBUTE_DATA = record
dwFileAttributes: Longint;
ftCreationTime, ftLastAccessTime, ftLastWriteTime: FILETIME;
nFileSizeHigh, nFileSizeLow: Longint;
end;
function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function GetFileAttributesEx(lpFileName: String; fInfoLevelId: DWORD; var lpFileInformation: WIN32_FILE_ATTRIBUTE_DATA): BOOL; external 'GetFileAttributesEx{#A}@kernel32.dll stdcall';
function BytesToSize(Bytes: Extended): String;
var
pszBuf: array [0..15] of Char;
begin
try
Result := StrFormatByteSize64(Abs(Bytes div 1E4), pszBuf[0], sizeof(pszBuf));
except end;
end;
function GetFileSize(Filename: String): Extended;
var
lpFileInformation: WIN32_FILE_ATTRIBUTE_DATA;
begin
if FileExists(ExpandConstant(Filename)) then
begin
GetFileAttributesEx(ExpandConstant(Filename), $0, lpFileInformation);
Result := $7FFFFFFF;
Result := ((lpFileInformation.nFileSizeHigh + integer(lpFileInformation.nFileSizeLow < 0))*Result + lpFileInformation.nFileSizeHigh + integer(lpFileInformation.nFileSizeLow < 0))*2 + lpFileInformation.nFileSizeLow;
end;
end;
procedure InitializeWizard();
begin
//хочу знать размер калькулятора
MsgBox(BytesToSize(GetFileSize('{sys}\calc.exe')), mbInformation, MB_OK);
/end;
|
Последний раз редактировалось El Sanchez, 20-03-2012 в 16:03.
Причина: не работало в Unicode
Отправлено: 18:27, 19-03-2012
| #1184
|