Показать сообщение отдельно
  #2  
Старый 18.04.2014, 01:38
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от HTTqp
Накидал код, но при выводе время создания папок у всех одинаково, как только не крутил уже все одно и тоже.
Имена папок ты добавляешь в список типа TStringList, но никакой другой информации о папках ты не сохраняешь - откуда же ей потом взяться когда доходит дело до цикла добавления списка папок в TListView ?
Я думаю лучше обойтись без обходного списка и добавлять и папки и файлы сразу в TListView, или сразу в нужную позицию, или же добавлять как придётся, а в конце отсортировать в нужном порядке.

Вот пример по первому варианту:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  sr: TSearchRec;
  DirIdx: Integer;
  sSize, s: String;
  iSize: Int64;
  li: TListItem;
begin
  LV.Items.BeginUpdate;
  try
    LV.Items.Clear;
    if FindFirst(aPath + '*.*', faAnyFile, sr) = NO_ERROR then
    try
      DirIdx := 0;
      repeat
        if (sr.Attr and faDirectory) = 0 then
        begin
          li := LV.Items.Add;
          Int64Rec(iSize).Lo := sr.FindData.nFileSizeLow;
          Int64Rec(iSize).Hi := sr.FindData.nFileSizeHigh;
          sSize := IntToStr(iSize);
        end
        else
        begin
          if (sr.Name = '.') or (sr.Name = '..') then Continue;
          li := LV.Items.Insert(DirIdx);
          Inc(DirIdx);
          sSize := '[Папка]';
        end;

        li.Caption := ChangeFileExt(sr.Name, '');
        li.SubItems.Add(ExtractFileExt(sr.Name));
        li.SubItems.Add(sSize);

        s := '----';
        if (sr.Attr and faArchive) <> 0 then s[1] := 'a';
        if (sr.Attr and faReadOnly) <> 0 then s[2] := 'r';
        if (sr.Attr and faHidden) <> 0 then s[3] := 'h';
        if (sr.Attr and faSysFile) <> 0 then s[4] := 's';
        li.SubItems.Add(s);

        li.SubItems.Add(DateTimeToStr(FileDateToDateTime(sr.Time)));

      until FindNext(sr) <> NO_ERROR;
    finally
      FindClose(sr);
    end;
  finally
    LV.Items.EndUpdate;
  end;
end;
Ответить с цитированием