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

Цитата:
Сообщение от SCrat.ORS
функции для получения дат создания файла, и дат изменения файла
Код:
Function GetDateCreate(SR:TSearchRec):String;
Var
  DT: TFileTime;
  ST: TSystemTime;
DD,MM,YY,H,M,S:string;
Begin
Result:='';
FileTimeToLocalFileTime( SR.FindData.ftCreationTime, DT );
FileTimeToSystemTime( DT, ST );
If st.wDay<10 then DD:='0'+inttostr(st.wDay) else DD:=inttostr(st.wDay);
If st.wMonth<10 then MM:='0'+inttostr(st.wMonth) else MM:=inttostr(st.wMonth);
YY:=inttostr(st.wYear);
H:=inttostr(st.wHour);
If st.wMinute<10 then M:='0'+inttostr(st.wMinute) else M:=inttostr(st.wMinute);
If st.wSecond<10 then S:='0'+inttostr(st.wSecond) else S:=inttostr(st.wSecond);
Result := DD+'.'+MM+'.'+YY+' '+H+':'+M+':'+S;
end;
Почему так сложно то? Это же можно сделать проще:
Код:
function GetDateCreate(SR: TSearchRec): String;
var
  FT: TFileTime;
  ST: TSystemTime;
  DT: TDateTime;
begin
  FileTimeToLocalFileTime(SR.FindData.ftCreationTime, FT);
  FileTimeToSystemTime(FT, ST);
  DT := SystemTimeToDateTime(ST);
  Result := DateTimeToStr(DT);

  // Или так:
  Result := FormatDateTime('dd.mm.yyyy hh:nn:ss,zzz', DT);
end;

Цитата:
Сообщение от SCrat.ORS
использовать в цикле поиска фалов

Код:
Var
  SR:TSearchRec;
  FindRes,exten,Name,Dir{путь где ищем все что есть}:string;
  k:Integer;
begin
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
While FindRes=0 do
  begin Name:=Dir; 
  if ((SR.Attr and faDirectory)=faDirectory) and
  ((SR.Name='.')or(SR.Name='..')) then
  begin
  FindRes:=FindNext(SR);
  Continue;
  end;

  if ((SR.Attr and faDirectory)=faDirectory) then /// если найден каталог, то
  begin
  FindFile(Dir+SR.Name+'\'); // входим в процедуру поиска с параметрами текущего каталога + каталог, что мы нашли
  FindRes:=FindNext(SR); // после осмотра вложенного каталога мы продолжаем поиск в этом каталоге
  Continue; // продолжить цикл
  end;
  Name:=Name+SR.Name;
  k:=length(SR.Name); exten:=copy(SR.Name,k-2,3);
  //if exten='txt' then
  try

  end;

... и т.д
И здесь тоже всё сложно и запутанно. Вот так попроще будет:
Код:
procedure FindFile(Path: String);
var
  SR: TSearchRec;
  ext: String;
begin
//  Path := IncludeTrailingPathDelimiter(Path);

  if FindFirst(Path + '*.*', faAnyFile, SR) = NO_ERROR then
  try
    repeat
      if (SR.Attr and faDirectory) = faDirectory then // Это каталог
      begin
        if (SR.Name <> '.') and (SR.Name <> '..') then // Если это не системные каталоги
          FindFile(Path + sr.Name + '\'); // то обрабатываем рекурсивно и подкаталоги
      end else // Это файл
      begin
        ext := AnsiLowerCase(ExtractFileExt(SR.Name));
        if ext = '.txt' then
        begin
//          ...
        end;
      end;
    until FindNext(SR) <> NO_ERROR;
  finally
    FindClose(sr); // И не забывать освобождать ресурсы - они не безграничные
  end;
end;
Ответить с цитированием