» Определяем размер файла, как это делает проводник Windows

K.A.V.
www.oszone.net
22.02.2010
Автор: kotkovets
Последнее обновление: 01.09.2011

Данный пример определяет размер файла.
Размер файла определяется, как это делает проводник Windows.

OutFile "FileSize.exe"
Name "GetSize File"
Caption "GetSize File"
XPStyle on

!define GetFileSize "!insertmacro GetFileSize"
!macro GetFileSize PATH OUT_SIZE
   Push $1
   Push $0
   FileOpen $0 `${PATH}` r
   System::Call "kernel32::GetFileSizeEx(ir0,*l.r1)" # в $1 размер файла в байтах
   FileClose $0
   System::Call "shlwapi::StrFormatByteSize64(lr1,t.r1,i${NSIS_MAX_STRLEN})"
   Pop $0
   Exch $1
   Pop `${OUT_SIZE}`
!macroend

Section
   ${GetFileSize} "$SYSDIR\shell32.dll" $0
   MessageBox MB_OK `Size [shell32.dll] = $0` IDOK
   Quit
SectionEnd
Определяем размеры всех HDD дисков вашего компютера.
!include "MUI2.nsh"
!include "FileFunc.nsh"

OutFile "GetDrives.exe"

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "GetSize Drives"
Caption "GetSize Drives"

ShowInstDetails show

Section GetDrives
   ${GetDrives} "HDD" "GetDrives" #перечисляем все HDD диски
SectionEnd

Function GetDrives
   ${DriveSpace} "$9" "/D=T /S=B" $R0
   ${DriveSpace} "$9" "/D=O /S=B" $R1
   ${DriveSpace} "$9" "/D=F /S=B" $R2
   System::Call "shlwapi::StrFormatByteSize64(lR0,t.R0,i${NSIS_MAX_STRLEN})"
   System::Call "shlwapi::StrFormatByteSize64(lR1,t.R1,i${NSIS_MAX_STRLEN})"
   System::Call "shlwapi::StrFormatByteSize64(lR2,t.R2,i${NSIS_MAX_STRLEN})"
   DetailPrint "Диск $9"
   DetailPrint "Размер: $R0"
   DetailPrint "Занято: $R1"
   DetailPrint "Свободно: $R2"
   DetailPrint "----------------"
   Push $0
FunctionEnd