Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 329

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Как подсчитать сколько папок и файлов в ListView.
Как это сделано в не которых FTP Client.

Vit2 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Vit2 (статус: Посетитель)
Вопрос отправлен: 11 февраля 2008, 09:36
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Насколько я понял...

Общее число айтемов: ListView.Items.Count.
Если ты отображаешь их как файлы и папки, то у каждого TListItem должен быть признак, к какой категории он относится: к папкам или файлам.
Допустим, ты используешь для этого свойство TListItem.Data, если Item - папка, то это свйоство равно Pointer(1), если файл, то Pointer(2). Тогда для подсчёта количества файлов и папок можно написать такой цикл:

var
  Index, Files, Folders: Integer;
begin
  Files:= 0;
  Folders:= 0;
 
  for Index:= 0 to ListView.Items.Count - 1 do
    case Integer(ListView.Items[Index].Data) of
      1: Inc(Folders);
      2: Inc(Files);
    end; //case
 
  ShowMessage('Файлов: ' + IntToStr(Files) + ', папок: ' + IntToStr(Folders) + '.');
end;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 11 февраля 2008, 10:05
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 11 февраля 2008, 12:30; участников в обсуждении: 1.
Vit2

Vit2 (статус: Посетитель), 11 февраля 2008, 12:30 [#1]:

В таком виде:

procedure TForm1.FTPTextDataLine(Sender: TObject; const TextLine: String);
var
List:TListItem;
x:string;
F: TSBFTPFileInfo;
Index, Files, Folders: Integer;
begin
try
Files:= 0;
Folders:= 0;
FTP.ParseFileListEntry(TextLine,F);
x:= Copy(TextLine,0,9);
List:=LView.Items.Add;
List.Caption:= F.FileName;
List.SubItems.Add(BytesToStr(F.FileSize));
List.SubItems.Add(DateTimeToStr(F.FileDate));
List.SubItems.Add(x);
case F.FileType of
fetDirectory:List.ImageIndex := 0;
fetFile:List.ImageIndex := 1;
fetSymlink:List.ImageIndex := 2;
end;
for Index:= 0 to LView.Items.Count - 1 do
case Integer(LView.Items[Index].Data) of
0: Inc(Folders);
1: Inc(Files);
end;
FolderPane1.Caption:='Папок: '+IntToStr(Folders);
FilePane2.Caption:='Файлов: '+IntToStr(Files);
except
on E : Exception do
Log(E.Message, true);
end;
end;

Например в ListView видно 3 папки и один файл, Folders показывает 4 а файлов 0.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:30
Выполнено за 0.03 сек.