Показать сообщение отдельно
  #5  
Старый 03.12.2008, 10:48
k@Z@k k@Z@k вне форума
Новичок
 
Регистрация: 31.07.2007
Сообщения: 55
Репутация: 12
По умолчанию

Код:
unit InfoFiles;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,registry;


  Type
  TFileInfo=record
    Exists:boolean;//true åñëè ôàéë íàéäåí  
    Name:String; //èìÿ ôàéëà ñ ðàñøèðåíèåì  
    ShortName:String;//DOS 8.3 èìÿ ôàéëà  
    NameNoExt:String;//èìÿ ôàéëà áåç ðàñøèðåíèÿ  
    Extension:string;//ðàñøèðåíèå ôàéëà  
    AssociatedFile:string;//ïðîãðàììà ñ êîòîðîé àññîöèèðîâàí ôàéë  
    Path:string;// ïóòü ê ôàéëó  
    ShortPath:string;// DOS 8.3 ïóòü ôàéëà  
    Drive:string;// äèñêîâîä íà êîòîðîì íàõîäèòñÿ ôàéë  
    CreateDate:TDateTime; //âðåìÿ êîãäà ôàéë ñîçäàí  
    Size:Int64;// ðàçìåð ôàéëà (ðàáîòàåò äëÿ ôàéëîâ è áîëüøå 2Gb)  
    Attributes:record //íàëè÷èå/îòñóòñòâèå ñèñòåìíûõ àòðèáóòîâ
    ReadOnly:boolean;  
    Hidden:boolean;  
    System:boolean;  
    Archive:boolean;
    end;  
    ModifyDate:TDateTime; // âðåìÿ ïîñëåäíåãî èçìåíåíèÿ ôàéëà  
    LastAccessDate:TDateTime; // äàòà ïîñëåäíåãî îòêðûòèÿ ôàéëà  
   end; 

  Function ReadFileInfo(FileName:string):TFileInfo;


implementation

 Function ReadFileInfo(FileName:string):TFileInfo;
 var ts:TSearchRec;

 Function FileTime2DateTime(FT:_FileTime):TDateTime;
  var FileTime:_SystemTime;  
  begin  
  FileTimeToLocalFileTime(FT, FT);  
  FileTimeToSystemTime(FT,FileTime);  
  Result:=EncodeDate(FileTime.wYear, FileTime.wMonth, FileTime.wDay)+  
  EncodeTime(FileTime.wHour, FileTime.wMinute, FileTime.wSecond, FileTime.wMilliseconds);
  end;  
  
 
 Function AssociatedFile(FileExt:string):string;
  var key:string;  
  begin  
  With TRegistry.create do
  try  
  RootKey:=HKEY_CLASSES_ROOT;
  OpenKey(FileExt, false);  
  Key:=ReadString('');  
  CloseKey;  
  OpenKey(key+'\Shell\open\command', false);  
  result:=ReadString('');  
  Closekey;  
  finally  
  free;  
  end  
  end;  
 
begin 
 Result.Name:=ExtractFileName(FileName);  
 Result.Extension:=ExtractFileExt(FileName);  
 Result.NameNoExt:=Copy(Result.Name,1,length(Result.Name)-length(Result.Extension));  
 Result.Path:=ExtractFilePath(FileName);  
 Result.Drive:=ExtractFileDrive(FileName);  
 Result.ShortPath:=ExtractShortPathName(ExtractFilePath(FileName));  
 if lowercase(Result.Extension)<>'.exe' then Result.AssociatedFile:=AssociatedFile(Result.Extension);  
 if FindFirst(FileName, faAnyFile, ts)=0 then  
  begin  
  Result.Exists:=true;  
  Result.CreateDate:=FileDateToDateTime(ts.Time);  
  Result.Size:=ts.FindData.nFileSizeHigh*4294967296+ts.FindData.nFileSizeLow;  
  Result.Attributes.ReadOnly:=(faReadOnly and ts.Attr)>0;  
  Result.Attributes.Hidden:=(faHidden and ts.Attr)>0;  
  Result.Attributes.System:=(faSysFile and ts.Attr)>0;  
  Result.Attributes.Archive:=(faArchive and ts.Attr)>0;  
  Result.ModifyDate:=FileTime2DateTime(ts.FindData.ftLastWriteTime);  
  Result.LastAccessDate:=FileTime2DateTime(ts.FindData.ftLastAccessTime);  
  Result.ShortName:=ts.FindData.cAlternateFileName;  
  Findclose(ts);  
  end  
  else   
  Result.Exists:=false;  
 end;
end.
Ответить с цитированием