Q&A

  • 특정 파일의 상세한 정보를 알고 싶습니다.
c:\a.bat라는 파일이 있다는 가정하에 저 파일의
용량이라던가 속성 생성시간 접근 시간 실행시간등을 알아서 화면에 보여주고 싶습니다.
2  COMMENTS
  • Profile
    한휘 2003.11.21 00:59

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, Registry;

    type
    TForm1 = class(TForm)
       OpenDialog1: TOpenDialog;
       Button1: TButton;
       Memo1: TMemo;
       procedure Button1Click(Sender: TObject);
    private
       { Private declarations }
    public
       { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation
    {$R *.DFM}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    FFileName, FFileAttr: String;
    i: THandle;
    inf: TWin32FindData;
    ftC,ftLA,ftLW: TSystemTime;
    ftCL,ftLAL,ftLWL: TFileTime;
    ftCs,ftLAs,ftLWs: string;
    reg: TRegistry;
    begin
    // 파일을 선택한다
    if not OpenDialog1.Execute then
       System.Exit;
    FFileName := OpenDialog1.FileName;

    Memo1.Clear;

    ftCs  :='';
    ftLAs :='';
    ftLWs :='';
    i := FindFirstFile(PChar(FFileName), inf); // 파일의 정보를 읽는다

    Memo1.Lines.Add('파일명(Long File Name): '+ inf.cFileName);
    Memo1.Lines.Add('DOS 파일명(DOS File Name): '+ inf.cAlternateFileName);
    Memo1.Lines.Add('파일크기(File Size): '+ FloatToStr((inf.nFileSizeHigh * MAXDWORD) + inf.nFileSizeLow));
    Memo1.Lines.Add('파일경로(File Path): '+ ExtractFilePath(FFileName));

    // 파일의 날짜 & 시간
    FileTimeToLocalFileTime(inf.ftCreationTime, ftCL);
    FileTimeToSystemTime(ftCL, ftC);
    FileTimeToLocalFileTime(inf.ftLastAccessTime, ftLAL);
    FileTimeToSystemTime(ftLAL, ftLA);
    FileTimeToLocalFileTime(inf.ftLastWriteTime, ftLWL);
    FileTimeToSystemTime(ftLWL, ftLW);
    // 시스템 시간을 일반 시간 표시방법으로 변환
    with ftC do
       ftCs  := format('%0.2d/%0.2d/%0.4d %0.2d:%0.2d:%0.2d', [wDay,wMonth,wYear,wHour,wMinute,wSecond]);
    with ftLA do
       ftLAs := format('%0.2d/%0.2d/%0.4d', [wDay,wMonth,wYear]);
    with ftLW do
       ftLWs := format('%0.2d/%0.2d/%0.4d %0.2d:%0.2d:%0.2d', [wDay,wMonth,wYear,wHour,wMinute,wSecond]);
    Memo1.Lines.Add('생성시간(Creation Time): '+ ftCs);
    Memo1.Lines.Add('최근접근시간(Last Access Time): '+ ftLAs);
    Memo1.Lines.Add('최근수정시간(Last Write Time): '+ ftLWs);

    // 파일의 속성(attributes)
    FFileAttr := '';
    if (FILE_ATTRIBUTE_ARCHIVE and inf.dwFileAttributes) = FILE_ATTRIBUTE_ARCHIVE then
       FFileAttr := FFileAttr + 'Archive ';
    if (FILE_ATTRIBUTE_SYSTEM and inf.dwFileAttributes) = FILE_ATTRIBUTE_SYSTEM then
       FFileAttr := FFileAttr + 'System ';
    if (FILE_ATTRIBUTE_READONLY and inf.dwFileAttributes) = FILE_ATTRIBUTE_READONLY then
       FFileAttr := FFileAttr + 'ReadOnly ';
    if (FILE_ATTRIBUTE_HIDDEN and inf.dwFileAttributes) = FILE_ATTRIBUTE_HIDDEN then
       FFileAttr := FFileAttr + 'Hidden ';
    Memo1.Lines.Add('파일속성(File Attributes): '+FFileAttr);

    // 레지스트리의 HKEY_CLASSES_ROOT에서 파일의 설명을 구한다
    reg := TRegistry.Create;
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey('\'+ExtractFileExt(FFileName),false);
    Memo1.Lines.Add('파일설명(File Type): '+ reg.ReadString(''));
    reg.Free;
    Windows.FindClose(i);
    end;

    end.


    =======================================================


    음... 위의 결과는 memo 콤포넌트에 아래와 같이 출력된다.
    =======================================================
    파일명(Long File Name): DelphiTip.zip
    DOS 파일명(DOS File Name): DELPHI~1.ZIP
    파일크기(File Size): 732401
    파일경로(File Path): C:\Documents and Settings\한대필\바탕 화면\
    생성시간(Creation Time): 28/02/2003 11:06:19
    최근접근시간(Last Access Time): 28/02/2003
    최근수정시간(Last Write Time): 28/02/2003 11:06:24
    파일속성(File Attributes): Archive
    파일설명(File Type): ALZip.zip

    ==========================================================

  • Profile
    허진 2003.11.21 19:00