wow-file文件说明

wow-file文件说明

  • 项目地址:https://gitee.com/wow-iot/wow-iot7
  • 本文件的的功能主要用于处理文件操作,主要涉及创建文件、删除文件、重命名、文件比较、获取文件大小、获取文件行数、获取文件信息操作;

创建文件

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

	char *tmp = strrchr((char *)pcFile, '/');
	if(tmp){
		size_t len = tmp - pcFile;
		char* dir = malloc(len+1);
		memset(dir,0,len+1);
		memcpy(dir,pcFile,len);
		wow_dir_create(dir);
		free(dir);
	}
	FILE *fp = fopen(pcFile, "w"); 
	CHECK_RET_VAL(fp,-SYSTEM_FOPEN_FAILED);

	fclose(fp);
	
	return WOW_SUCESS;
}

删除文件

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

	return remove(pcFile);
}

检查文件是否存在

int wow_file_check_exist(const char *pcFile)
{
	CHECK_RET_VAL_P(pcFile,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");
	
	return (access(pcFile, F_OK|W_OK|R_OK) == 0) ? 1 : 0;
}

文件重命名

int wow_file_rename(const char *pcSrcFile, const char *pcDestFile)
{
	CHECK_RET_VAL_P(pcSrcFile && pcDestFile,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");
		
	return rename(pcSrcFile, pcDestFile);
}

获取文件大小

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

	struct stat st;
	int ret = stat(pcFile, &st);
	CHECK_RET_VAL_P_A(ret == 0, -SYSTEM_STAT_FAILED,"file stat failed!\n");
	*pnSize = st.st_size;


	return WOW_SUCESS;
}

检查文件行数

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

	int ch; 	
	int lineCnt = 0;
	
	FILE *fp = fopen(pcFile, "r"); 
	CHECK_RET_VAL_P(fp,-SYSTEM_FOPEN_FAILED,"file open failed!\n");
	
	while((ch = fgetc(fp)) != EOF) 
	{	
	 	if(ch == '\n')  
	 	{	
		 	lineCnt++;  
	 	} 
 	}	

	fclose(fp);
	
	*pnLine = lineCnt;
	return WOW_SUCESS;
}

两个文件比较

/*内容相同返回0 不相同返回1 错误参数返回< 0*/
int wow_file_compare(const char* pcFile1,const char* pcFil2)
{
	int ret = 0;
	
	CHECK_RET_VAL_P(pcFile1 && pcFil2,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");
	
	FILE* const fp1 = fopen(pcFile1, "rb");
	FILE* const fp2 = fopen(pcFil2, "rb");
	CHECK_RET_VAL_P(fp1 && fp2,-SYSTEM_FOPEN_FAILED,"file open failed!\n");
	
	while (ret == 0) {
    	char b0[1024];
    	char b1[1024];
    	size_t const r0 = fread(b0, 1, sizeof(b0), fp1);
    	size_t const r1 = fread(b1, 1, sizeof(b1), fp2);

    	ret = (r0 != r1);
    	if (!r0 || !r1) break;
    	if (!ret) ret = memcmp(b0, b1, r0);

		fclose(fp1);
    	fclose(fp2);
	}

	return ret;
}

获取文件后缀

char *wow_file_suffix(const char *pcFile)
{
	CHECK_RET_VAL_ERRNO_P(pcFile,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");

	char *tmp = strrchr((char *)pcFile, FILE_SUFFIX);
	if (tmp) {
    	return tmp+1;
	}
	
	return NULL;
}

获取文件信息

int wow_file_info(const char *pcFile, FileInfo_T *ptInfo)
{
	CHECK_RET_VAL_P(pcFile,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");

	struct stat st;
	int ret = stat(pcFile, &st);
	CHECK_RET_VAL_P_A(ret == 0, -SYSTEM_STAT_FAILED,"file stat failed!\n");

	switch (st.st_mode & S_IFMT) {
	case S_IFSOCK:///<套接字
    	ptInfo->type = FILE_SOCKET;
    	break;
	case S_IFLNK:///<符号链接
    	ptInfo->type = FILE_LINK;
    	break;
	case S_IFBLK:///<块设备
		ptInfo->type = FILE_BLK;
    	break;
	case S_IFCHR:///<字符设备
    	ptInfo->type = FILE_CHR;
    	break;
	case S_IFREG:///<常规文件
    	ptInfo->type = FILE_REG;
    	break;
	case S_IFDIR:///<目录
    	ptInfo->type = FILE_DIR;
    	break;
	default:
    	break;
	}
	ptInfo->size  = st.st_size;
	ptInfo->atime = st.st_atim.tv_sec;
	ptInfo->mtime = st.st_ctim.tv_sec;
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值