wow-dir文件夹操作说明

wow-dir文件说明

  • 项目地址:https://gitee.com/wow-iot/wow-iot7
  • 本文件的的功能主要用于处理文件夹操作,主要涉及检查路径是否为文件夹、创建文件夹(逐层创建)、删除文件夹操作(递归删除);

判断当前路径是否为文件夹

int wow_path_is_dir(char const* pcPath)
{
	CHECK_RET_VAL_P(pcPath,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");

	struct stat buf = {0};
	CHECK_RET_VAL(stat (pcPath, &buf)  == 0,-SYSTEM_STAT_FAILED);
	
	return S_IFDIR == (S_IFDIR & buf.st_mode);
}

创建文件夹-逐层创建

int wow_dir_create(const char* pcPath)
{
	int ret = 0;
	char *temp, *pos;

	CHECK_RET_VAL_P(pcPath,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");

	temp = strdup(pcPath);
	pos  = temp;

	if (strncmp(temp, "/", 1) == 0) {
    	pos += 1;
	} else if (strncmp(temp, "./", 2) == 0) {
    	pos += 2;
	}
	
	for ( ; *pos != '\0' && pos; ++ pos) {
    	if (*pos == '/') {
        	*pos = '\0';
			ret = mkdir(temp, 0775);
			if(errno == EEXIST) ret = 0;
			CHECK_RET_BREAK_EXE_P(ret == 0,ret = -SYSTEM_MKDIR_FAILED,"failed mkdir :%s\n",temp);
        	*pos = '/';
    	}
	}

	if (*(pos - 1) != '/') {
    	ret = mkdir(temp, 0775);
		if(errno == EEXIST) ret = 0;
	}
	
	free(temp);
	return ret;
}

删除文件夹-递归删除

int wow_dir_remove(const char *pcPath)
{
	struct dirent *ent = NULL;
	char full_path[MAX_PATH_SIZE] = {0};
	int ret = 0;

	CHECK_RET_VAL_P(pcPath,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");


	DIR *pdir = opendir(pcPath);
	CHECK_RET_VAL_P_A(pdir,-SYSTEM_OPENDIR_FAILED,"can not open pcPath: %s\n", pcPath);

	while (NULL != (ent = readdir(pdir))) {
    	if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) {
        	continue;
    	}
    	memset(full_path, 0, MAX_PATH_SIZE);
    	snprintf(full_path,MAX_PATH_SIZE-1, "%s/%s", pcPath, ent->d_name);
    	if (ent->d_type == DT_DIR) {	///< 如果是文件夹,则递归删除
        	ret = wow_dir_remove(full_path);
        	CHECK_RET_VAL(ret == 0,-SYSTEM_RMDIR_FAILED);
    	}else{
        	ret = remove(full_path);
        	CHECK_RET_VAL(ret == 0,-SYSTEM_REMOVE_FAILED);
    	}
	}

	closedir(pdir);
	
	///< 删除空文件夹
	return rmdir(pcPath);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值