Windows文件操作(删除过时文件)

概述

    程序在运行时会生成很多临时文件(如日志文件),这些文件隔断时间就会被删除。需要用到一些文件操作函数和时间获取函数

    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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值