最近在参与铁路项目有关图像拼接超时文件删除,这些资料在各大平台上还是很多的,在搜集了众多资料后一步步实现了最终的目标,这里做个记录:
第一步删除超时文件(但是无法删除超时文件夹)
这里只以简单的分钟超时为基准,而没有做过多的超时逻辑。
void CMFCApplication1Dlg::OnBnClickedButton1()
{
CFileFind ff;
CString szDir = _T("D:\\铁路项目测试\\MFCApplication1\\2017年9月\\*.*");//在路径之后加 *.* 的意思是查找这个路径下的所有类型的文件
BOOL res = ff.FindFile(szDir);
while (res)
{
res = ff.FindNextFile();
if ((!ff.IsDirectory()) &&(!ff.IsDots()))
{
CTime fTime;
CTime T = CTime::GetCurrentTime();
int y1 = T.GetYear();
int m1 = T.GetMonth();
int d1 = T.GetDay();
int h1 = T.GetHour();
int min1 = T.GetMinute();
int s1 = T.GetSecond();
///////////////////////////////////////////////////类型转换
ff.GetCreationTime(fTime);
int y2 = fTime.GetYear();
int m2 = fTime.GetMonth();
int d2 = fTime.GetDay();
int h2 = fTime.GetHour();
int min2 = fTime.GetMinute();
int s2 = fTime.GetSecond();
if ( min2 < min1)
{
CString path = _T("D:\\铁路项目测试\\MFCApplication1\\2017年9月\\");
path += ff.GetFileName();
DeleteFile(path);
}
}
}
ff.Close();
}
利用删除文件BUTTON完成了指定逻辑超时文件的删除。
IsDots判断是否为点,这个要说明一下,用过Dos的话,就应该知道,每个目录下都有缺省的两个目录,名称分别为 ‘. ‘和 ‘.. ‘,分别代表本层目录和上一层目录。因此,当我们在遍历目录下文件时,需要过滤掉这两个缺省目录。IsDirectory表明这是一个目录,isDots表明这个是.或者..而这两个东西虽然是目录,但是一个表明这个目录本身,一个代表上层目录(但是根目录下面..也是本身)
第二步将删除文件扩大至可以删除文件夹
void CMFCApplication1Dlg::myDeleteDirectory(CString directory_path) //删除一个文件夹下的所有内容
{
CFileFind finder;
CString path = directory_path + _T("//*.*");
BOOL bWorking = finder.FindFile(path);
while (bWorking)
{
bWorking = finder.FindNextFile();
CString res = finder.GetFileName();
CString res1 = finder.GetFilePath();
if (finder.IsDirectory() && !finder.IsDots())
{//处理文件夹
CTime fTime;
CTime T = CTime::GetCurrentTime();
int y1 = T.GetYear();
int m1 = T.GetMonth();
int d1 = T.GetDay();
int h1 = T.GetHour();
int min1 = T.GetMinute();
int s1 = T.GetSecond();
///////////////////////////////////////////类型转换
finder.GetCreationTime(fTime);
int y2 = fTime.GetYear();
int m2 = fTime.GetMonth();
int d2 = fTime.GetDay();
int h2 = fTime.GetHour();
int min2 = fTime.GetMinute();
int s2 = fTime.GetSecond();
if (min2 < min1)
{
myDeleteDirectory(finder.GetFilePath()); //递归删除文件夹
RemoveDirectory(finder.GetFilePath());
}
}
else
{//处理文件
DeleteFile(finder.GetFilePath());
}
}
}
在这里的如果将CString path = directory_path + _T(“//.“); 写成
CString path+=_T(“//.“); 有时候需要将button点两次才能删除,不知道为什么。