Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


El Sanchez,
помню спрашивал как быстро определить размер папки (те для меня пример ...\Inno Setup 5\Scripts\Dobrov\DirSizeCal.iss работает слишком медленно)

нашёл пример использующий объект FileSystemObject http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
на форуме http://forum.vingrad.ru/forum/topic-84976/unread-1.html

результат - функция (здесь вывод в мегабайтах под мои нужды) :
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
function GetFolserSize(path:string):Integer;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFolder(path).Size div (1024*1024);
end;

procedure InitializeWizard();
begin                     
  MsgBox(IntToStr(GetFolserSize('C:\Program Files (x86)')), mbInformation, MB_OK);
end;
в данном случае папку Program Files (x86) у меня (пока что размером почти 2 гига после переустановки винды) посчитала за секунду
более наглядный пример:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
function GetFolserSize(path:string):Extended;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFolder(path).Size;
end;


function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.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;

procedure InitializeWizard();
begin                     
  MsgBox(BytesToSize(GetFolserSize('C:\Program Files (x86)')), mbInformation, MB_OK);
end;

но вот при попытке посчитать C:\Windows вылетает с ошибкой на Result := oFS.GetFolder(path).Size div (1024*1024);
читать дальше »

---------------------------
Runtime Error
---------------------------
Line 14:

Exception: : .
---------------------------
ОК
---------------------------

может папка слишком большого размера и он не может посчитать или я функцию криво записал
с другой стороны папку с видео размером больше 250 гигов посчитала корректно и тоже быстро
в общем хотелось бы узнать в чём причина ошибки ну и как следствие - улучшение/исправление

в качестве производных:
размер файла:
читать дальше »
Код: Выделить весь код
function GetFileSize(FilePath:string):Extended;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFile(FilePath).Size;
end;


function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.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;

procedure InitializeWizard();
begin                     
  MsgBox(BytesToSize(GetFileSize('C:\Windows\regedit.exe')), mbInformation, MB_OK);
end;


версия файла:
читать дальше »
Код: Выделить весь код
function FileVersion(FilePath:string):string;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetFileVersion(FilePath);
end;


procedure InitializeWizard();
begin                     
  MsgBox((FileVersion('C:\Windows\regedit.exe')), mbInformation, MB_OK);
end;


получение буквы жёсткого диска на которм лежит файл:
читать дальше »
Код: Выделить весь код
function GetFolserSize(FilePath:string):string;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetDriveName(FilePath);
end;


procedure InitializeWizard();
begin                     
  MsgBox((GetFolserSize('C:\Windows\regedit.exe')), mbInformation, MB_OK);
end;


генерирование уникального имени папки для использования её в %Temp%
читать дальше »
Код: Выделить весь код
function CreateFolserUniqueName:string;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetTempName;
end;


procedure InitializeWizard();
begin
  MsgBox(CreateFolserUniqueName, mbInformation, MB_OK);
end;


альтернатива функции DirExists:
читать дальше »
Код: Выделить весь код
function FolderExists(Folder:string):boolean;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.FolderExists(Folder);
end;


procedure InitializeWizard();
begin
  if FolderExists('C:\setup') then MsgBox('ok', mbInformation, MB_OK);
end;


проверка наличия жёсткого диска по букве:
читать дальше »
Код: Выделить весь код
function DriveExists(Drive:string):boolean;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.DriveExists(Drive);
end;


procedure InitializeWizard();
begin
  if DriveExists('C') then MsgBox('ok', mbInformation, MB_OK);
end;

Последний раз редактировалось Johny777, 02-10-2012 в 04:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:11, 02-10-2012 | #1061