第一步:获取文件最后修改时间
bool GetFileModifyDate(CString filePathName, SYSTEMTIME &modDate)
{
HANDLE hFile;
WIN32_FIND_DATA wfd;
SYSTEMTIME systime;
FILETIME localtime;
memset(&wfd, 0, sizeof(wfd));
if((hFile=FindFirstFile(filePathName, &wfd))==INVALID_HANDLE_VALUE)
return false;
//转换时间
FileTimeToLocalFileTime(&wfd.ftLastWriteTime,&localtime);
FileTimeToSystemTime(&localtime,&systime);
modDate = systime;
return true;
}
第二步:转换时间秒数
time_t TimeConvertToSec(int year,int month,int day)
{
tm info={0};
info.tm_year=year-1900;
info.tm_mon=month-1;
info.tm_mday=day;
return mktime(&info);
}
第三步:计算两个日期相差天数
int DaysOffset(int fYear, int fMonth, int fDay, int tYear, int tMonth, int tDay)
{
int fromSecond = (int)TimeConvertToSec(fYear,fMonth,fDay);
int toSecond = (int)TimeConvertToSec(tYear,tMonth,tDay);
return (toSecond-fromSecond)/24/3600;
}
第四步:删除文件夹下指定天数前的文件
void DeleteFilePreDaysFromFolder(CString sFolder, int days)
{
if(days < 0)
days = 30;
SYSTEMTIME curDate;
GetLocalTime(&curDate); //获取当前时间
CString strMatch = sFolder + _T("\\*.*");
CString strFullName;
CFileFind finder;
BOOL bWorking = finder.FindFile(strMatch);
while (bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDots())
continue;
if(finder.IsDirectory())
{
//DeleteFilePreDaysFromFolder(finder.GetFileName() + _T("\\*.*"), 0);
continue; //跳过子文件夹
}else
{
strFullName = finder.GetFilePath();
SYSTEMTIME fDate;
if(GetFileModifyDate(strFullName, fDate))
{
int dayOffset = DaysOffset(fDate.wYear, fDate.wMonth, fDate.wDay,
curDate.wYear, curDate.wMonth, curDate.wDay);
if (dayOffset > days)
CFile::Remove(strFullName); //删除文件
}
}
}
finder.Close();
}
测试
int main(void)
{
//删除D:\ErrorLog目录下7天前的文件
DeleteFilePreDaysFromFolder("D:\\ErrorLog",7);
}