概述
程序在运行时会生成很多临时文件(如日志文件),这些文件隔断时间就会被删除。需要用到一些文件操作函数和时间获取函数
windows系统API:
打开文件
FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
获取文件句柄
FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
判断文件是否是目录
bool PathIsDirectoryA(LPCSTR pszPath);
删除文件
int remove(const char* _FileName);
把文件时间转换为系统时间
bool FileTimeToSystemTime(const FILETIME * lpFileTime, LPSYSTEMTIME lpSystemTime);
C标准函数:
time(time_t const _Time);
代码:
#include <stdio.h>
#include <iostream>
#include <time.h>
#include "windows.h"
#include <Shlwapi.h>
#include <string>
#pragma comment(lib, "shlwapi.lib")
bool IsRemoveCurrentFile(tm * sysTime, LPSYSTEMTIME fileTime);
void FindFile(std::string dir);
int main(void)
{
FindFile("E:/vscpp/UML");
return 0;
}
//文件操作函数
void FindFile(std::string dir)
{
WIN32_FIND_DATAA stFD; //文件信息结构体
HANDLE h; //目录句柄
std::string temp;
temp = dir + "\\*";
h = FindFirstFileA(temp.c_str(), &stFD);
time_t t = time(0); //获取当前系统时间,c函数
while(FindNextFileA(h, &stFD))
{
if (temp == dir + "..") //如果是上级目录则continue
{
continue;
}
else if (PathIsDirectoryA(temp.c_str())) //如果是目录也continue
{
continue;
}
else
{
//文件最后修改时间 fileSysTime
LPSYSTEMTIME fileSysTime = new _SYSTEMTIME;
//把文件时间转换为系统时间
FileTimeToSystemTime(&(stFD.ftLastWriteTime), fileSysTime);
//判断文件是否删除
//根据最后修改时间和当前程序运行时间计算文件删除
tm *m = new tm;
localtime_s(m, &t);
bool isRemove = IsRemoveCurrentFile(m, fileSysTime);
if (isRemove)
{
std::string fileTemp = dir + "/" + stFD.cFileName;
//删除文件
remove(fileTemp.c_str());
}
delete m;
m = NULL;
}
}
}
bool IsRemoveCurrentFile(tm * sysTime, LPSYSTEMTIME fileTime)
{
if (fileTime->wYear == sysTime->tm_year + 1900)
{
if (fileTime->wMonth == sysTime->tm_mon + 1)
{
if (fileTime->wDay == sysTime->tm_mday)
{
return false;
}
return true;
}
return true;
}
return true;
}