linux c删除超时文件包括空目录

15 篇文章 0 订阅
7 篇文章 0 订阅
bool DeleteTimeOutFile(const char* dir, int nSpanTime)
{
	if (dir == nullptr || strlen(dir) <= 0)		return false;
	struct stat s;
	//lstat(dir, &s);
	stat(dir, &s);
	if (!S_ISDIR(s.st_mode))
	{
		WriteRunLog(VIS_LOG_ERROR, "%s is not a valid directory.", dir);
		return false;
	}

	DIR* pDir = opendir(dir);
	if (nullptr == pDir)
	{
		WriteRunLog(VIS_LOG_ERROR, "cannot open dir %s.", dir);
		return false;
	}
	WriteRunLog(VIS_LOG_INFO, "open dir %s success", dir);

	int nChildCnt = 0;
	struct dirent* filename;
	while ((filename = readdir(pDir)) != nullptr)
	{
		if (strcmp(filename->d_name, ".") == 0 || 0 == strcmp(filename->d_name, ".."))
			continue;
		nChildCnt++;
		
		char szChild[256] = { 0 };
		sprintf(szChild, "%s/%s", dir, filename->d_name);

		WriteRunLog(VIS_LOG_INFO, "szChild = %s", szChild);
		if (filename->d_type == DT_DIR)
		{
			if (DeleteTimeOutFile(szChild, nSpanTime))
			{
				nChildCnt--;
			}
		}
		else
		{
			stat(szChild, &s);
			WriteRunLog(VIS_LOG_INFO, "sec:%lld, now:%lld", s.st_mtim.tv_sec, time(nullptr));
			if (time(nullptr) - s.st_mtim.tv_sec > nSpanTime)
			{
				if (0 == remove(szChild))
				{
					WriteRunLog(VIS_LOG_INFO, "delete file %s success.", szChild);
					nChildCnt--;
				}
				else
				{
					WriteRunLog(VIS_LOG_ERROR, "delete file %s failed.", szChild);
				}
			}
		}
	}
	
	closedir(pDir);
	//不删除根目录
	if ( 0 == nChildCnt && 0 != strcmp(dir, g_Conf.m_strRootDir.c_str()))
	{
		if (0 == rmdir(dir))
		{
			WriteRunLog(VIS_LOG_INFO, "delete dir %s success.", dir);
			return true;
		}
		else
		{
			WriteRunLog(VIS_LOG_ERROR, "delete dir %s failed.", dir);
			return false;
		}
	}
	return false;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值