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;
'Delphi' 카테고리의 다른 글
변수나 레코드 변수를 파일하나에서 관리하는 방법 (0) | 2013.12.11 |
---|---|
통신데이터 STX,ETX 체크 (0) | 2013.12.11 |
외부 프로그램 찾아서 현재 프로그램의 판넬 안으로 넣어버리기 (0) | 2013.12.11 |
현재 프로그램에서 외부 프로그램 찾아서 이벤트 실행하기 (0) | 2013.12.11 |
기본 Ado 연결,해제,테이블 업데이트 (0) | 2013.12.02 |