一套比较实用的文件操作函数集

本文深入探讨了信息技术领域的核心概念,包括前端开发、后端开发、移动开发、游戏开发、大数据开发、开发工具等多个方面,详细阐述了每个领域的关键技术和实际应用场景,旨在为读者提供全面的技术视野。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// FileOp.h

#ifndef _FILEOP_H_
#define _FILEOP_H_

#include <stdio.h>
#include <stdlib.h>

#ifndef SAFE_FREE
#define SAFE_FREE(p) if(p) { free(p); p = NULL; }
#endif

#ifdef __cplusplus
extern "C" {
#endif

//------------------------------------------------------------------------
//  FILE_OP_GetFileSize()   
//                      - 获取文件的长度
//  szFileName          - 文件名
//  pulFileSize         - 返回的文件的长度(单位:字节)
//------------------------------------------------------------------------
int FILE_OP_GetFileSize(const char* szFileName, unsigned long* pulFileSize);

//------------------------------------------------------------------------
//  FILE_OP_RetFileSize()   
//                      - 获取文件的长度
//  szFileName          - 文件名
//  函数返回值:文件的长度(单位:字节)
//------------------------------------------------------------------------
int FILE_OP_RetFileSize(const char* szFileName);

//------------------------------------------------------------------------
//  FILE_OP_ReadDataFromFile()   
//                      - 获取文件中指定长度的数据内容
//  szFileName          - 文件名
//  pbData              - 返回的数据内容
//  ulDataSize          - 数据的长度(单位:字节)
//------------------------------------------------------------------------
int FILE_OP_ReadDataFromFile(const char* szFileName, 
							 unsigned char* pbData, unsigned long ulDataSize);

//------------------------------------------------------------------------
//  FILE_OP_ReadAllDataFromFile()   
//                      - 获取文件中所有内容
//  szFileName          - 文件名
//------------------------------------------------------------------------
char* FILE_OP_ReadAllDataFromFile(const char* szFileName);

#define FLAG_SZ_END_WITH_ZERO 1
#define FLAG_SZ_END_WITHOUT_ZERO 0

//------------------------------------------------------------------------
//  FILE_OP_ReadAllDataFromFileEx()   
//                      - 获取文件中所有内容,并且可选择是否以'\0'结尾
//  szFileName          - 文件名
//  flag_sz             - 是否以'\0'结尾。0:否;1:是
//------------------------------------------------------------------------
char* FILE_OP_ReadAllDataFromFileEx(const char* szFileName, int flag_sz);

//------------------------------------------------------------------------
//  FILE_OP_WriteDataToFile()   
//                      - 保存数据到文件
//  szFileName          - 文件名
//  pbData              - 要保存的数据
//  ulDataSize          - 数据的长度(单位:字节)
//------------------------------------------------------------------------
int FILE_OP_WriteDataToFile(const char* szFileName, 
							const unsigned char* pbData, unsigned long ulDataSize);

//------------------------------------------------------------------------
//  FILE_OP_AppendDataToFile()   
//                      - 附加数据到文件末尾
//  szFileName          - 文件名
//  pbData              - 要附加的数据
//  ulDataSize          - 数据的长度(单位:字节)
//------------------------------------------------------------------------
int FILE_OP_AppendDataToFile(const char* szFileName, 
							 const unsigned char* pbData, unsigned long ulDataSize);

#ifdef __cplusplus
}
#endif

#endif // _FILEOP_H_


// FileOp.cpp

#include "FileOp.h"

int FILE_OP_GetFileSize(const char* szFileName, unsigned long* pulFileSize)
{
	FILE *fp = fopen(szFileName, "rb");
	if ( fp )
	{
		fseek(fp, 0, SEEK_END);
		*pulFileSize = ftell(fp);
		fclose(fp);
		return 0;
	}
	return -1;
}

int FILE_OP_RetFileSize(const char* szFileName)
{
	int iFileLen = 0;
	FILE *fp = fopen(szFileName, "rb");
	if ( fp )
	{
		fseek(fp, 0, SEEK_END);
		iFileLen = ftell(fp);
		fclose(fp);
	}
	return iFileLen;
}

int FILE_OP_ReadDataFromFile(const char* szFileName, unsigned char* pbData, unsigned long ulDataSize)
{
	unsigned long ulReadedSize = 0;
	FILE *fp = fopen(szFileName, "rb");
	if ( fp )
	{
		ulReadedSize = (unsigned long)fread(pbData, 1, ulDataSize, fp);
		fclose(fp);
		return ( ulReadedSize == ulDataSize ) ? 0 : -1;
	}
	return -1;
}

char* FILE_OP_ReadAllDataFromFile(const char* szFileName)
{
	unsigned long ulFileSize = 0;
	if ( 0 == FILE_OP_GetFileSize(szFileName, &ulFileSize) )
	{
		char* pbBuffer = (char*)malloc(ulFileSize);
		if ( 0 == FILE_OP_ReadDataFromFile(szFileName, (unsigned char*)pbBuffer, ulFileSize) )
		{
			return pbBuffer;
		}
		else
		{
			free(pbBuffer);
			return NULL;
		}
	}
	return NULL;
}

char* FILE_OP_ReadAllDataFromFileEx(const char* szFileName, int flag_sz)
{
	unsigned long ulFileSize = 0;
	if ( 0 == FILE_OP_GetFileSize(szFileName, &ulFileSize) )
	{
		char* pbBuffer = NULL;
		if ( 1 == flag_sz )
		{
			pbBuffer = (char*)malloc(ulFileSize+1);
		}
		else
		{
			pbBuffer = (char*)malloc(ulFileSize);
		}
		
		if ( 0 == FILE_OP_ReadDataFromFile(szFileName, (unsigned char*)pbBuffer, ulFileSize) )
		{
			if ( 1 == flag_sz )
			{
				pbBuffer[ulFileSize] = '\0';
			}
			return pbBuffer;
		}
		else
		{
			free(pbBuffer);
			return NULL;
		}
	}
	return NULL;
}

int FILE_OP_WriteDataToFile(const char* szFileName, const unsigned char* pbData, unsigned long ulDataSize)
{
	unsigned long ulWritedSize = 0;
	FILE *fp = fopen(szFileName, "wb");
	if ( fp )
	{
		ulWritedSize = (unsigned long)fwrite(pbData, 1, ulDataSize, fp);
		fclose(fp);
		return ( ulWritedSize == ulDataSize ) ? 0 : -1;
	}
	return -1;
}

int FILE_OP_AppendDataToFile(const char* szFileName, const unsigned char* pbData, unsigned long ulDataSize)
{
	unsigned long ulWritedSize = 0;
	FILE *fp = fopen(szFileName, "awb");
	if ( fp )
	{
		ulWritedSize = (unsigned long)fwrite(pbData, 1, ulDataSize, fp);
		fclose(fp);
		return ( ulWritedSize == ulDataSize ) ? 0 : -1;
	}
	return -1;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值