遍历文件按时间删除文件

做个笔记

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值