做个笔记
WIN32_FIND_DATA 的时间成员为FILETIME类型,可转为time_t类型,time_t为UTC时间,单位是秒,FILETIME也是UTC时间,但是此类型表示自 1601 年 1 月 1 日开始的 100 纳秒单位数,而time_t定义为从1970年01月01日00时00分00秒起至现在的总秒数,所以要减去370年的时间:
//将FILETIME转化成UTC时间,time_t为UTC时间(秒数)
void FileTimeToTime_t(FILETIME ft, time_t* t)
{
LONGLONG ll;
ULARGE_INTEGER ui;
ui.LowPart = ft.dwLowDateTime;
ui.HighPart = ft.dwHighDateTime;
ll = ft.dwHighDateTime << 32 + ft.dwLowDateTime;
*t = ((LONGLONG)(ui.QuadPart - 116444736000000000) / 10000000);
}
win32遍历和删除方法:
//path为路径 file为文件格式 nametype为命名格式
static bool SearchAndDel(LPCTSTR path, LPCTSTR& file , LPCTSTR& nametype)
{
HANDLE hFile;
TCHAR buffer[MAX_PATH] = { 0 };
WIN32_FIND_DATA pNextInfo;
wsprintf(buffer, nametype, path,file);
time_t t_CurTime;
time(&t_CurTime);//获取当前时间,UTC时间
time_t t_File;
hFile = FindFirstFile(buffer, &pNextInfo);
if (!hFile) {
return false;
}
while (TRUE)
{
TCHAR szFile[MAX_PATH] = { 0 };
if (pNextInfo.cFileName[0] == _T('.'))//过滤.和..
continue;
if (pNextInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//过滤文件夹
{
;
}
else
{
FileTimeToTime_t(pNextInfo.ftLastWriteTime, &t_File);
lstrcpy(szFile, path);
lstrcat(szFile, pNextInfo.cFileName);
if (t_CurTime - t_File > 259200)//大于三天则删除
{
DeleteFile(szFile);
}
}
if (!FindNextFile(hFile, &pNextInfo))
{
break;
}
}
return true;
}