/*
功能:删除过期的日志文件。日志文件夹路径为strLogPath。
要求:
1、日志文件夹内部只能存储日志文件。不然可能会被删掉
2、日志文件名称格式为*_年月日*(比如:log_20210413.txt)或者年月日*(比如:20210413.txt)
3、iDays为保留日志的天数,超过则认为日志过期
入参:
iDays 保留日志的天数
strLogPath 日志文件夹路径
*/
void ClearLog(UINT iDays,CString strLogPath)
{
if (iDays <= 0)return;
WIN32_FIND_DATA FindFileData;
CString sAllFile = strLogPath + "\\*";
HANDLE hFind = ::FindFirstFile(sAllFile,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 遇到文件夹
{
}
else // 遇到文件
{
CString strFileName;
strFileName.Format("%s", FindFileData.cFileName);
if (strFileName.GetLength() >= 7)
{
CString sFileFullPath = strLogPath + "\\" + strFileName;// 文件全路径
//strFileName.Replace("-", "");
if (strFileName.Find('_') != -1)
{
strFileName = strFileName.Right(strFileName.GetLength() -strFileName.Find('_') -1);
}
__int64 nFileName = _atoi64(strFileName); // 取得文件的日期,如:20101030
CTime tNowTime = CTime::GetCurrentTime();
tNowTime = tNowTime - CTimeSpan(iDays, 0, 0, 0); // 指向nDays天前的日期
__int64 nNowTime = _atoi64(tNowTime.Format("%Y%m%d"));
if (20000000 < nFileName && nFileName < nNowTime)
{
::DeleteFile(sFileFullPath);
}
}
}
if(!FindNextFile(hFind, &FindFileData))
break;
}
FindClose(hFind);
}
环境 windows
语言:C++