Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Общий объем файлов


13 ©   (2006-01-07 19:47:00) 

Использую FindFirst findnext FindClose для поиска файлов результат вывожу в Listview. А как подсчитать общий объем файлов найденных и выведенных в ListView


UnKnow1234   (2006-01-07 22:29:00) [1]


> А пример можно?


procedure TForm1.Button1Click(Sender: TObject);
Var F:TSearchRec;
   i:Integer;
   sum:Extended;
begin
sum:=0;
i:=faAnyFile;
If FindFirst('c:\Video\Movies\*.*',i,F)<>0 Then Exit;
While FindNext(F)=0 Do
 If (F.Attr and faDirectory)=0 Then
   sum:=sum+(F.Size);
Label1.Caption:=FloatToStr(sum)+' Byte';
end;


Virgo_Style   (2006-01-07 21:13:00) [2]

Sergey2005   (07.01.06 20:51) [8]
как там размер файла вычислить


Есть соответствующее поле у TSearchRec, если, конечно, не нужно реально занятое место на диске, там все гораздо интересней.


Sergey2005   (2006-01-07 20:51:00) [3]

Привёл бы пример, да ток щас не помню как там размер файла вычислить, а лесть в справку нет желания.

Virgo_Style ©   (07.01.06 20:45) [6]
*или вместо процедуры сделать функцию, возвращающую общий размер найденных файлов, imho так красивше :-)*
С функцией оно понятно лудше, просто я привёл пример.


13   (2006-01-07 20:46:00) [4]

А пример можно?


Virgo_Style   (2006-01-07 20:45:00) [5]

Sergey2005   (07.01.06 20:27) [5]
тогда filesize должна быть глобальной


или вместо процедуры сделать функцию, возвращающую общий размер найденных файлов, imho так красивше :-)


Sergey2005   (2006-01-07 20:27:00) [6]

При нахождении файла, определяеш его раэмер к примеру в result, ну а потом приплюсовываеш к переменной filesize:

filesize:=filesize+result

filesize первоночально в 0 должно быть, если процедура запускается не один раз, то тогда filesize должна быть глобальной, чтоб не потерять общий результат.


13   (2006-01-07 20:03:00) [7]

Если не сложно покажите на примере

procedure ffind(cat:string); //каталог, откуда начать поиск
var sea:TSearchRec;
res:integer; //результат поиска (0 или нет)
begin
res:=FindFirst(cat+'*.*',faAnyFile,sea); //ищем первый файл
res:=findNext(sea);//ищем следующий файл
While res=0 do
begin
if (Sea.Attr=faDirectory) and ((Sea.Name='.')or(Sea.Name='..')) then//чтобы не было файлов . и..
begin
Res:=FindNext(sea);
Continue;//продолжаем цикл
end;

if (Sea.Attr=faDirectory) then//если нашли директорию, то ищем файлы в ней
begin
Ffind(cat+Sea.Name+'\');//рекурсивно вызываем нашу процедуру
Res:=FindNext(Sea);//ищем след. файл
Continue;//продолжаем цикл
end;
form1.ListBox1.Items.Add(Sea.Name);//добавляем в Listbox:Tlistbox имя файла
Res:=FindNext(Sea);//ищем след. файл
end;
FindClose(Sea);//освобождаем пересенную поиска
end;


13   (2006-01-07 20:01:00) [8]

Можно сразу при вводе в Listview в одной переменной складывать размер, тоесть файл 1 + 2 +3...
i:=i+filesize

получается только размер последнего файла


Sergey2005   (2006-01-07 19:57:00) [9]

Можно сразу при вводе в Listview в одной переменной складывать размер, тоесть файл 1 + 2 +3...
i:=i+filesize


Virgo_Style   (2006-01-07 19:57:00) [10]

TSearchRec.Size, операция суммирования (+)


Наверх

Титульная страница Поиск, карта сайта Написать письмо