본문 바로가기

Delphi

파일 생성일 대비 파일 삭제

 

procedure TMainForm.Button1Click(Sender: TObject);

var

aa : THandle;

crFileTime: TFileTime;

laFileTime: TFileTime;

lwFileTime: TFileTime;

lcFT : TFileTime;

lc  : Integer;

Tf : TDateTime;

Tc : TDateTime;

Tw : TDateTime;

Tn : TDateTime;

i,j:integer;

GapDate:String;

TempStr : String;

begin

  Memo1.Lines.Clear;

  FileExtSearch(ExtractFilePath(Application.ExeName), Memo1);

  GapDate := Edit1.Text ;


  if GapDate = '' then

  begin

    ShowMessage('Month Empty');

    exit;

  end;


  Tn := Now - (strtoint(GapDate)*30) ;  //day gap

  for j := 0 to Memo1.Lines.Count-1 do

  begin

    //if you need Special Folder check Use Pos function

    if pos('Database',Memo1.Lines.Strings[j]) >0 then

    begin

       FileListBox1.Mask:=Memo1.Lines.Strings[j]+'Result-*.*'

    end

    else

    begin

      FileListBox1.Mask:= Memo1.Lines.Strings[j]+'*.txt';

    end;


    FileListBox1.Hint := Memo1.Lines.Strings[j];

    FileListBox1.Update;

    for I := 0 to FileListBox1.Items.Count-1 do

    begin

      TempStr := '';

      aa := FileOpen(FileListBox1.Hint+FileListBox1.Items.Strings[i], fmOpenRead or fmShareDenyNone);


      GetFileTime(aa, @crFileTime , @laFileTime, @lwFileTime );


      //create time

      FileTimeToLocalFileTime(crFileTime, lcFT);

      FileTimeToDosDateTime(lcFT, LongRec(lc).Hi, LongRec(lc).Lo);

      Tc := FileDateToDateTime(lc);


      //last access time

      FileTimeToLocalFileTime(laFileTime, lcFT);

      FileTimeToDosDateTime(lcFT, LongRec(lc).Hi, LongRec(lc).Lo);

      Tf := FileDateToDateTime(lc);


      //last write time

      FileTimeToLocalFileTime(lwFileTime, lcFT);

      FileTimeToDosDateTime(lcFT, LongRec(lc).Hi, LongRec(lc).Lo);

      Tw := FileDateToDateTime(lc);


      FileClose(aa);


      TempStr :='File Name :['+FileListBox1.Items.Strings[i]+'] , Make Time :[' + FormatDateTime('yyyy-mm-dd hh:nn:ss:zzz', Tc)+']';

      Tempstr := Tempstr + ', Last Access Time :[' + FormatDateTime('yyyy-mm-dd hh:nn:ss:zzz', Tf)+']';

      Tempstr := Tempstr + ', Last Write Time :[' + FormatDateTime('yyyy-mm-dd hh:nn:ss:zzz', Tw)+']';

      Memo2.Lines.Add(tempstr);


      if (Tn > Tc) then  //Date Gap check

      begin

        if DeleteFile(FileListBox1.Hint+FileListBox1.Items.Strings[i]) then

          Memo3.Lines.Add('Old File Name :['+FileListBox1.Items.Strings[i]+'] , Delete Limit Date :[' + FormatDateTime('yyyy-mm-dd hh:nn:ss:zzz', Tn)+']');

      end;

    end;

  end;

 

end;


다른 방법 ( 델마당 Dotorial(dotorial83)님 댓글 )

procedure TfrmMain.GetFileAttr(sFile : string);
var
  i : THandle;
  inf : TWin32FindData;
  SystimeCreate, SysTimeAccess, SystimeReWrite: TSystemTime;
  FileTimeCreate, FileTimeAccess, FileTimeReWrite: TFileTime;
  CreateTime, AccessTime, ReWriteTime: string;
begin
  try
    CreateTime  := ``;
    AccessTime  := ``;
    ReWriteTime := ``;
    i           := FindFirstFile(PChar(sFile), inf); // 파일의 정보를 읽는다
    try
      Memo1.Lines.Add(`파일명 : `   + inf.cFileName);
      Memo1.Lines.Add(`파일크기 : ` + FloatToStr((inf.nFileSizeHigh * MAXDWORD) + inf.nFileSizeLow));
      Memo1.Lines.Add(`파일경로 : ` + ExtractFilePath(sFile));

      FileTimeToLocalFileTime(inf.ftCreationTime, FileTimeCreate);
      FileTimeToSystemTime(FileTimeCreate, SystimeCreate);
      FileTimeToLocalFileTime(inf.ftLastAccessTime, FileTimeAccess);
      FileTimeToSystemTime(FileTimeAccess, SysTimeAccess);
      FileTimeToLocalFileTime(inf.ftLastWriteTime, FileTimeReWrite);
      FileTimeToSystemTime(FileTimeReWrite, SystimeReWrite);

      with SystimeCreate  do CreateTime   := format(`Ų.2d/Ų.2d/Ų.4d Ų.2d:Ų.2d:Ų.2d`, [wDay,wMonth,wYear,wHour,wMinute,wSecond]);
      with SysTimeAccess  do AccessTime   := format(`Ų.2d/Ų.2d/Ų.4d`, [wDay,wMonth,wYear]);
      with SystimeReWrite do ReWriteTime  := format(`Ų.2d/Ų.2d/Ų.4d Ų.2d:Ų.2d:Ų.2d`, [wDay,wMonth,wYear,wHour,wMinute,wSecond]);
      Memo1.Lines.Add(`파일 생성시간 : `      + CreateTime);
      Memo1.Lines.Add(`파일 최근접근시간 : `  + AccessTime);
      Memo1.Lines.Add(`파일 최근수정시간 : `  + ReWriteTime);
    except
      on E:Exception do
      begin
        memo1.Lines.Add(E.Message);
      end;
    end;
  finally
    Windows.FindClose(i);
  end;
end;   

 

 

DateCheck_Delphi5_2010.zip