删除指定路径下的超时文件和文件夹(目录)

来源:互联网 发布:饶颖为啥不告了知乎 编辑:程序博客网 时间:2024/05/13 11:52

最近在参与铁路项目有关图像拼接超时文件删除,这些资料在各大平台上还是很多的,在搜集了众多资料后一步步实现了最终的目标,这里做个记录:

第一步删除超时文件(但是无法删除超时文件夹)
这里只以简单的分钟超时为基准,而没有做过多的超时逻辑。

 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点两次才能删除,不知道为什么。

阅读全文
1 0
原创粉丝点击