知/Delphi

파일 정보 알아내기

채수욱 2008. 8. 23. 19:08

{===============================================================================
function/procedure 명 : GetFileInfo()
설    명 : 파일의 정보를 알아온다.
파라미터 : FileName: String; -> 정보를알아올 파일명,
            var iFileSizeByte -> 파일사이즈, sFileSizeKB -> 파일사이즈 : longint;
            var sCreateDate -> 파일생성일, sUpdateDate -> 파일 수정일,
            sAcessDate -> 파일접근일, sFileType -> 파일타입 : String
반환값   : -
================================================================================}
procedure GetFileInfo(FileName: String; var iFileSizeByte, sFileSizeKB : longint;
                    var sCreateDate, sUpdateDate, sAcessDate, sFileType : String);
  function FileSize(hi,lo: integer) :longint;
  begin
    Result := (hi * MAXDWORD) + lo;
  end;
 
  // This function retrieves the last time, the given file was written to disk
  function GetLocalTime(a:tfiletime):string;
  var
    mtm:   TSystemTime;
    at:    TFileTime;
    ds,ts: ShortString;
  begin
    filetimetolocalfiletime(a,at);
    filetimetosystemtime(at,mtm);
    SetLength(ds, GetDateFormat(LOCALE_USER_DEFAULT, 0, @mtm, PChar('yyyy/MM/dd'), @ds[1], 255) - 1);
    //SetLength(ts, GetTimeFormat(LOCALE_USER_DEFAULT, time_noseconds, @mtm, NIL, @ts[1], 255)  - 1);TIME_NOMINUTESORSECONDS
    SetLength(ts, GetTimeFormat(LOCALE_USER_DEFAULT, 0, @mtm, PChar('hh:mm:ss'), @ts[1], 255)  - 1);
    Result:=ds+'  '+ts;
  end;

var
  SHFinfo: TSHFileInfo;
  FindData: TWin32FindData;
  FindHandle :THandle;
begin

    iFileSizeByte := 0;
    sFileSizeKB   := 0;
    sCreateDate   := '';
    sUpdateDate := '';
    sAcessDate := '';
    sFileType := '';

    ShGetFileInfo(PChar(FileName), 0, SHFinfo, SizeOf(SHFinfo), // 파일종류만 알아낸다
                    SHGFI_TYPENAME);
    sFileType := SHFinfo.szTypeName; // 파일종류(Type)

    FindHandle := Windows.FindFirstFile(PChar(FileName), FindData);
    try
        iFileSizeByte := FileSize(FindData.nFileSizeHigh, FindData.nFileSizeLow);
        sFileSizeKB := Trunc(FileSize(FindData.nFileSizeHigh, FindData.nFileSizeLow) / 1024);

        sCreateDate    := GetLocalTime(FindData.ftCreationTime);   // 파일생성일(Created)
        sUpdateDate   := GetLocalTime(FindData.ftLastWriteTime);  // 파일변경일(Modified)
        sAcessDate := GetLocalTime(FindData.ftLastAccessTime); // 파일접근일(LastAccess)
    finally
        Windows.FindClose(FindHandle);
    end;
end;

 

출처 : 델마당 길가메쉬님 글

' > Delphi' 카테고리의 다른 글

DBGrid 선택된 셀 전체에 색 넣기.  (0) 2009.09.04
2D 게임프로그램 참고자료  (0) 2009.08.29
한글 안깨지게 자르기  (0) 2008.08.23
RS-232, 485의 구분 및 통신코드  (0) 2008.08.14
GRF 파일 저장 문제  (0) 2008.07.25