C++完成目录下文件夹和各种类型文件的超时删除

这篇具有很好参考价值的文章主要介绍了C++完成目录下文件夹和各种类型文件的超时删除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++完成目录下文件夹和文件的超时删除

最近的一个项目遇到了要删除过时的一些自己这边生成的文件
思路就是先找到文件(包括文件夹),然后判断他们的时间来确定是否删除文件(文件夹)。

  • 1.CFileFind 类
    执行本地文件搜索,并且是执行 Internet 文件搜索的 CGopherFileFind 和 CFtpFileFind 的基类。

语法:

class CFileFind : public CObject

能使用到的公共方法

属性 说明
CFileFind::FindFile 搜索目录以获取指定文件名。
CFileFind::FindNextFile 从上一次对 FindFile 的调用继续文件搜索。
CFileFind::GetCreationTime 获取文件的创建时间。
CFileFind::GetLastWriteTime 获取上次更改并保存文件的时间。
CFileFind::GetFileName 获取所找到文件的名称(包括扩展名)

CFileFind microsoft 定义

  • 2.CTime 类
    表示绝对时间和日期。

语法:

class CTime

能使用到的公共方法

属性 说明
CTime::GetCurrentTime 创建一个表示当前时间的 CTime 对象(静态成员函数)

CTime microsoft 定义

  • 3.CTimeSpan 类
    时间量,在内部存储为时间跨度的秒数。

语法:

class CTimeSpan

能使用到的公共方法

属性 说明
CTimeSpan::GetDays 返回一个值,该值表示此 CTimeSpan 中的完成天数。
CTimeSpan::GetTotalHours 返回一个值,该值表示此 CTimeSpan 中的总完成小时。

CTimeSpan microsoft 定义

  • 4.文件删除方法

语法文章来源地址https://www.toymoban.com/news/detail-465662.html

BOOL DeleteFileA( [in] LPCSTR lpFileName);
BOOL RemoveDirectoryA([in] LPCSTR lpPathName);
方法(fileapi.h) 说明
DeleteFileA 删除现有文件。
RemoveDirectoryA 删除现有空目录。

RemoveDirectoryA microsoft 定义

DeleteFileA microsoft 定义

  • 5.其他方法

语法

template <size_t size>
errno_t strcpy_s(
   char (&dest)[size],
   const char *src
); // C++ only

template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format,
   ...
); // C++ only
方法(fileapi.h) 说明
strcpy_s 复制字符串。
sprintf_s 将设置格式的数据写入字符串。

实现代码

//递归删除超时的目录和目录下所有文件
bool DeleteTimeoutDirectory(char* strDirName)
{
	CFileFind tempFind;
	
	char strTempFileFind[MAX_PATH];
	
	sprintf_s(strTempFileFind, "%s\\*.*", strDirName);
	
	//查找文件   搜索目录以获取指定文件名。
	BOOL IsFinded = tempFind.FindFile(strTempFileFind);
	while (IsFinded)
	{
		IsFinded = tempFind.FindNextFile();												//从上一次对 FindFile 的调用继续文件搜索。

		if (!tempFind.IsDots())															//确定所找到文件的名称是否具有名称“.”或“..”,指示该名称实际上是一个目录。
		{
			//获取时间差
			CTime fileTime;
			int rettime = tempFind.GetLastWriteTime(fileTime);
			CTime newTime = CTime::GetCurrentTime();
			CTimeSpan timespan = newTime - fileTime;
			int nDays = timespan.GetDays();
			//获取时间差END
			
			char strFoundFileName[MAX_PATH];
			strcpy_s(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));    //获取所找到文件的名称

			if (!tempFind.IsDirectory())                                                 //确定所找到文件是否为目录。
			{
				//删除文件
				char strTempFileName[MAX_PATH];
				sprintf_s(strTempFileName, "%s\\%s", strDirName, strFoundFileName);
				if (nDays > 3)   //时间大于3天就删除
				{
					DeleteFile(strTempFileName);
				}
			}
			else
			{
				//递归目录
				char strTempDir[MAX_PATH];
				sprintf_s(strTempDir, "%s\\%s", strDirName, strFoundFileName);

				DeleteTimeoutDirectory(strTempDir);//回调
			}
		}
	}

	tempFind.Close();

	//删除文件夹  有文件存在会删除失败 也返回true
	if (!RemoveDirectory(strDirName))
	{
		return TRUE;
	}
	return TRUE;
}
  • 注意可以选择文件的删除类型
    sprintf_s(strTempFileFind, “%s\\*.*”, strDirName);
    这里的“*.*”是指定的文件类型
    “*”是匹配所有的字符串
    例如:删除.TEXT类型就是 “*.TEXT”
  • 时间可以改为小时等,使用CTimeSpan 类不同方法获取时间差
    此处是 if (nDays > 3) //时间大于3天就删除

到了这里,关于C++完成目录下文件夹和各种类型文件的超时删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux移动文件和文件夹(目录)命令

    命令mv 英文move 翻译移动 mv命令可以移动文件或文件夹(目录),也可以重命令(覆盖)文件。 1. 移动文件/重命名 单纯地移动某一个文件直接使用: 这个方法也可以用来修改文件的名称。 2. 移动文件夹(目录)下的内容 如要移动某个文件夹下的 某个内容: 即可移走###内容

    2024年02月06日
    浏览(13)
  • python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

    在1文件夹中有1,2两个文件夹 将这两个文件夹中的文件复制到 after_copy中 源文件 复制后: 参考1 源文件 复制后 参考2 如果复制bmp文件就将 suffix = \\\".json\\\" 改为 suffix = \\\".bmp\\\"

    2024年02月11日
    浏览(18)
  • 安卓的工程目录文件夹简单介绍

    当创建了一个安卓工程之后,系统会生成很多文件夹,那么这些文件夹都存放的是什么东西呢? src:存放java代码,有包,有文件。相当于普通java程序的src文件夹。 gen:存放自动生成的文件。R.java存放的是程序的页面、按键、文本等的id。 Android 4.4和Android Private Libaries:安卓

    2024年02月05日
    浏览(20)
  • 【ubuntu】修改文件夹(目录)及其内部文件的权限

    目录 修改文件夹(目录)及其内部文件的权限 在 Ubuntu 中,你可以使用 chmod 命令来修改文件夹(目录)及其内部文件的权限。下面是一个将文件夹及其内部所有文件的权限都修改为相同权限的示例命令: 其中, permission 是权限设置,表示所需的权限,例如 755 或 777 , fold

    2024年02月03日
    浏览(19)
  • 【Python】获取指定目录下的文件夹和文件

    我们经常会有对文件做批量处理的需求,获取指定目录下的文件夹和文件(有时需要获取所有文件,即子目录下的文件也需要获取)。Python 中扫描目录有两种方法: os.listdir() os.walk() 建立项目框架如下: 其中, test:项目文件夹名称,含有 aa子文件夹 和 main.py aa:文件夹,含

    2024年02月17日
    浏览(16)
  • windows共享文件夹(目录)(SMB服务)

    SMB服务,文件共享服务,俗称文件夹(目录)、打印机等共享 windos系统中,文件夹共享需要设置指定用户与密码,通过输入用户和密码进行连接,在设置共享时系统中有Everyone所有人设置,允许所有人直接访问,但是访问基本不成功,所以需要指定用户与密码去进行访问,提

    2024年02月02日
    浏览(17)
  • 用perl查找文件夹中的所有文件和目录

    查找文件夹中的文件和目录是一个很常见的操作,使用perl的File::Find模块可以很方便的实现。首先使用perldoc File::Find 查看一下文档: 这个核心的就是文档中描述的回调函数。我们举一个实际的例子,一个空的git仓库为例,下面的脚本用于查找文件夹中的所有文件: 回调函数中

    2024年02月04日
    浏览(20)
  • C语言创建目录(文件夹)之mkdir

    一、mkdir 说明:创建目录。 头文件库: 函数原型: mode方式:可多个权限相或,如0755表示S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH 权限 说明 S_IRWXU 00700权限,代表该文件所有者拥有读,写和执行操作的权限 S_IRUSR(S_IREAD) 00400权限,代表该文件所有者拥有可读的权限 S_IWUSR(S_IWRITE

    2024年02月13日
    浏览(17)
  • python遍历目录(文件夹)os.walk

    打印:

    2024年02月08日
    浏览(15)
  • Ubuntu设置共享文件夹(解决/mnt 目录下没有 hgfs 目录)

             目录 1、Windows创建一个共享文件夹 2、在虚拟机的设置中选择Windows下的共享文件夹 3、在Ubuntu中查看共享文件夹 4、解决/mnt 目录下没有 hgfs 目录 5、设置共享文件夹以后,/mnt/hgfs下没有出现共享文件夹  这种方式使用的前提是 Ubuntu虚拟机和Windows系统在同一主机上

    2024年02月06日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包