Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.04.2014, 20:51
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
Восклицание Время создания папки

Накидал код, но при выводе время создания папок у всех одинаково, как только не крутил уже все одно и тоже. Вот код:
Где выводится время подписал
Код:
var
Handle:THandle;
FindData:TWin32FindData;
Temp_ext,Temp_Cap,result:String;
Folders:TStringList;
i,Temp:Byte;
begin
ImageList1.Clear;
LV.SmallImages:=ImageList1;
LV.Items.BeginUpdate;//
LV.Items.Clear; //Очищаем LV
Handle:=FindFirstFile(PChar(aPath+'*.*'),FindData);
if Handle<>INVALID_HANDLE_VALUE then
 try
  Folders:=TStringList.Create;
  while FindNextFile(Handle,FindData) do
  begin
    Temp_Cap:=ExtractFileName(FindData.cFileName); //
    Temp_ext:=ExtractFileExt(FindData.cFileName); //
    if (FindData.dwFileAttributes and faDirectory)=faDirectory then Folders.Append(Temp_Cap)
     else
   with LV.Items.Add do
   begin
    if (FindData.dwFileAttributes and faDirectory)<>faDirectory then
    begin
      GetIcon(Temp_Cap); // Это вывод иконок
      Caption:=('gfgf');
      SubItems.Add((temp_ext));
      SubItems.Add(FloatToStrF(FindData.nFileSizeHigh+FindData.nFileSizeLow,ffNumber,18,0));
    end
      else
      SubItems.Add('');
      SubItems.Add(TimeToDateFile(FindData.ftLastWriteTime));
      Result:='';
      if (FILE_ATTRIBUTE_ARCHIVE and FindData.dwFileAttributes)>0 then Result:=Result+'a' else Result:=Result+'-';  //
      if (FILE_ATTRIBUTE_READONLY and FindData.dwFileAttributes)>0 then Result:=Result+'r' else Result:=Result+'-'; //
      if (FILE_ATTRIBUTE_HIDDEN and FindData.dwFileAttributes)>0 then Result:=Result+'h' else Result:=Result+'-';   //
      if (FILE_ATTRIBUTE_SYSTEM and FindData.dwFileAttributes)>0 then Result:=Result+'s' else Result:=Result+'-';   //
      SubItems.Add(Result);
    end;
   end;
  for i:=0 to Folders.count-1 do with LV.Items.insert(i) do
  begin
  SubItems.Add('[Папка]');
   SubItems.Add('');
   SubItems.Add(TimeToDateFile(FindData.ftLastWriteTime)); // вывод времени создания папки
   Caption:=Folders[i];
  end;
  Folders.Free;
  finally
  LV.Items.EndUpdate; //
  end;
end;
Ответить с цитированием
  #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;
Ответить с цитированием
  #3  
Старый 18.04.2014, 21:48
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию

А можно ли как то просто изменить мой код, то есть может там лишний условие (if, while) убрать чтобы работал он. И выводилось время создания папки ровно?

Последний раз редактировалось HTTqp, 18.04.2014 в 22:34.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter