Показать сообщение отдельно
  #6  
Старый 13.04.2010, 04:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

так, в качестве развлекалочки. Вот процка, которая занимается перебором файлов. Тебе надо только правильные калл-бэки написать и ей подсунуть в качестве третьего параметра:

Код:
type
  TEFCallBackAttr = record
    Name : String;
    FullName : String;
    Size : Integer;
    TimeStamp : TDateTime;
    IsFolder : Boolean;
  end;

  TEFCallBack = procedure(AInfo : TEFCallBackAttr) Of Object;

//...

procedure TForm1.EnumFiles(APath: String; ARecurse : Boolean; ACallBack: TEFCallBack);

  function FileTime2DateTime(FileTime: TFileTime): TDateTime;
  var
    LocalFileTime: TFileTime;
    SystemTime: TSystemTime;
  begin
    FileTimeToLocalFileTime(FileTime, LocalFileTime) ;
    FileTimeToSystemTime(LocalFileTime, SystemTime) ;
    Result := SystemTimeToDateTime(SystemTime) ;
  end;

  procedure CallCallBack(AP : String; AF : TSearhcRec; ACB: TEFCallBack);
  var
    AInfo : TEFCallBackAttr;
  begin
    If ACB <> Nil Then
      Begin
        AInfo.Name := F.Name;
        AInfo.FullName := APAth + F.Name;
        AInfo.IsFolder := (AF.Attr And faDirectory) <> 0;
        AInfo.Size := F.Size;
        AInfo.TimeStamp:= FileTime2DateTime(F.Time);
        ACB(AInfo);
      End;
  end;

var
  F : TSearchRec;
  iFound : Integer;
begin
  APath := IncludeTrailingPathDelimiter(APath);
  iFound := FindFirst(APath + '*.*', faAnyfile, F);
  While iFound = 0 Do
    Begin
      If (F.Attr And faDirectory) <> 0
        Then
          Begin
            CallCallBack(APAth, F, ACallBack);
            If (F.Name <> '.') And (F.Name <> '..') And (ARecurse) Then
              EnumFiles(APath,ARecurse,ACallBack);
          End
        Else
          Begin
            CallCallBack(APAth, F, ACallBack);
          End;
      iFound := FindNext(F);
    end;
  FindClose(F);
end;
Ответить с цитированием