有些时候系统会生成很多临时文件,我们需要提供清理临时文件的功能。
编程论坛最近有人讨论这个问题,小新就把自己的方法和大家分享一下。
在Delphi中可以利用FindFirst/FindNext函数例遍制定目录的文件,并根据文件名和生成时间来判断是否需要清除。
其中关于文件生成时间需要从FileData的结构体里ftCreationTime获得,ftCreationTime为_FileTime结构C++声明如下
typedef struct _FILETIME { // ft
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
此结构需要通过API FileTimeToSystemTime来转换成系统时间,声明如下
BOOL FileTimeToSystemTime(
CONST FILETIME *lpFileTime, // pointer to file time to convert
LPSYSTEMTIME lpSystemTime // pointer to structure to receive system time
);
systemtime声明如下
typedef struct _SYSTEMTIME { // st
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
这样就可以通过系统时间来判断是否是指定日期之前的临时数据了。
程序如下
function ClearTempFile: Boolean;
var
SearchRec: TSearchRec;
systime: TSystemTime;
path: string;
begin
result := false;
path := ExtractFilePath(Application.ExeName) + ''web\chart\'';
if not DirectoryExists(path) then
Exit;
if FindFirst(path + ''*.gif'', faAnyFile, SearchRec) <> 0 then
begin
exit;
end;
repeat
if (SearchRec.Attr and faDirectory) = faDirectory then //判断是否是目录
Continue;
if SearchRec.Name <> ''score.gif'' then //如果是指定文件则不删除
begin
FileTimeToSystemTime(SearchRec.FindData.ftCreationTime, systime);
if EncodeDate(systime.wYear, systime.wMonth, systime.wDay) < Date then //是否是一天以前的临时数据
begin
//ShowMessage(''应该删除'' + SearchRec.Name);
DeleteFile(path + SearchRec.Name);
end;
end;
until FindNext(SearchRec) <> 0; //直到没有文件
FindClose(SearchRec);
result := true;
end;
欢迎大家到http://www.programbbs.com交流讨论。
以上程序在Delphi7下测试通过。