Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Неужели Дельфям слабо...!?

493
16 декабря 2001 года
Taras
24 / / 20.09.2000
Hello All!

Задача 1.Есть папка размером 161 Mb, файлов 12 541, папок 413
2. Нужно определить ее размер наиболее быстрым образом

Решение

I. В Delphi
Использовал пример из "Советы по Delphi от Валентина Озерова 1.4.2001"
Вот этот пример

*****************************************************************************
DirBytes Cardinal; //переменная для определения размера директории

procedure TForm1.Size_subfolder(Dirstring);
var
SearchRec TSearchRec;
Separator string;
begin

if Copy(Dir,Length(Dir),1)='\' then
Separator = ''
else
Separator = '\';

if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0 then
begin
if FileExists(Dir+Separator+SearchRec.Name) then
begin
DirBytes = DirBytes + SearchRec.Size;
end else if DirectoryExists(Dir+Separator+SearchRec.Name) then
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
Size_subfolder(Dir+Separator+SearchRec.Name);
end;
end;

while FindNext(SearchRec) = 0 do
begin
if FileExists(Dir+Separator+SearchRec.Name) then
begin
DirBytes = DirBytes + SearchRec.Size;
end
else if DirectoryExists(Dir+Separator+SearchRec.Name) then
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
Size_subfolder(Dir+Separator+SearchRec.Name);
end;
end;
end;
end;

FindClose(SearchRec);
end;
*****************************************************************************

Delphi определяли размер папки за 120 секунд!!!

II.В Visual Basic 6.0 Pro динамически подключался к &quot;Microsoft Scripting Runtime&quot; - SCRRUN.DLL

Вот этот код

*****************************************************************************
Sub ShowFolderSize(path As String)
Dim fs, My_Folder
Set fs = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set My_Folder = fs.GetFolder(path)
MsgBox My_Folder.Size 'Выводится сообщение о размере папки
End Sub
*****************************************************************************

Visual Basic определяли размер папки за 3 секунды!!!

Есть разница между 3 секундами и 120 секундами?

Я не знаю, как воспользоваться SCRRUN.DLL в Delphi 5.0
В книгах описана возможность вызова лишь функций из DLL - файлов.

Может, есть какая-то API-функция определения размера папки (каталога), которую можно вызвать из Delphi 5.0?

С уважением Тарас [EMAIL]tarnet@pisem.net[/EMAIL]
592
17 декабря 2001 года
Разьярённое_x77
27 / / 20.01.2000
const
Size: cardinal = 0;

type
TMainF = class(TForm)
....
public
{ Public declarations }
procedure Scan (s: string);
end;
 
var
MainF: TMainF;

implementation

{$R *.DFM}


procedure TMainF.ToolButton1Click(Sender: TObject);
begin
if dl.Directory <> '' then begin
Size := 0;
Scan (dl.Directory);
Label1.Caption := FormatFloat ('###,###,###,###,##0', Size);
end;
end;

procedure TMainF.Scan(s: string);
var
sr: TSearchRec;
r: integer;
OldDir: string;
begin
try
ChDir (s);
r := FindFirst ('*.*', faAnyFile, sr);
while r = 0 do begin
if (sr.Name <> '.') and (sr.Name <> '..') then begin
if (faDirectory and sr.Attr) = faDirectory then begin
OldDir := GetCurrentDir;
Scan (ExpandFileName (sr.Name));
ChDir (OldDir);
end else begin
Inc (Size, sr.Size);
end;
end;
r := FindNext (sr);
end;
finally
FindClose (sr);
end;
end;

end.
 
 
Program Files (1 104 011 684 байт) у меня сканировался за 4-5 секунд. 160 метров - не знаю, засечь не успевал. Машина - Athlon 950, 128 ОЗУ, винт - Quantum FireBall 30 Gb.
 
А вот что касается &quot;слабо&quot;, кривые ручки - они и в Никарагуа кривые ручки.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог