/*********************************************************************
* 文件名称: FileOperate.c
* 文件说明: 文件操作模块
* 说 明:
* 功能1: 获取堆的大小
***********************************************************************/
#include <stdio.h>
#include <string.h>
#include "FileOperate.h"
/*
*******************************************************
读取文件模块:
======================
做法:
打开文件=>操作=>记录当前操作位置=>关闭文件
========================
*******************************************************
*/
/*返回值的正常或异常*/
#define COMM_ERR -1 /*错误*/
#define COMM_OK 0 /*正常*/
/*********************************************************************
* 函数名称: GetFileLength_FO
* 函数说明: 获取文件长度
* 输入 : char* pcFileName
* 输出 : long 文件长度Bytes
***********************************************************************/
long GetFileLength_FO(char* pcFileName)
{
long lFileBLength;
FILE* fpFile = NULL;
if (NULL == (fpFile = fopen(pcFileName, "rb")))goto __ERROR_RETURN;
if (0 != fseek( fpFile, 0L, SEEK_END))goto __ERROR_RETURN0;
lFileBLength = ftell(fpFile);
if(-1L == lFileBLength )goto __ERROR_RETURN0;
fclose(fpFile);
return lFileBLength ;
__ERROR_RETURN0:
fclose(fpFile);
__ERROR_RETURN:
return -1L ;
}
/*********************************************************************
* 函数名称: InitFileOpeDes_FO
* 函数说明: 初始化文件操作描述符
* 输入 : void
* 输出 : int COMM_ERR/COMM_OK
***********************************************************************/
int InitFileOpeDes_FO(T_FILE_OPERATE_DES_FO * ptOFileDes, char* pcFileName)
{
if (NULL == ptOFileDes)goto __ERROR_RETURN;
/*初始化ptOFileDes*/
ptOFileDes->lOFilePointer = 0x0L;
return COMM_OK ;
__ERROR_RETURN:
return COMM_ERR ;
}
/*********************************************************************
* 函数名称: UpdateOFilePointer_FO
* 函数说明: 更新当前操作文件的指针为当前位置
* 输入 : long
* 输出 : int COMM_ERR/COMM_OK
***********************************************************************/
int UpdateOFilePointer_FO(T_FILE_OPERATE_DES_FO * ptOFileDes, long lValue)
{
if ((NULL == ptOFileDes)){
return COMM_ERR ;
}
ptOFileDes->lOFilePointer = lValue ;
return COMM_OK ;
}
#define MateNameOut_LENGTH FILENAME_MAX_LENGTH<<1 //文件名的最大长度
/*********************************************************************
* 函数名称: RewindOperateFile_FO
* 函数说明: 复位正在操作使用的文件
* 输入 : ( void *buffer, size_t size, size_t count, FILE *stream );
* 输出 : void
***********************************************************************/
void RewindOperateFile_FO(T_FILE_OPERATE_DES_FO* ptFilePointer )
{
ptFilePointer->lOFilePointer = 0L;
return ;
}
/**********************************************************************************************
* 函数名 : ReCreateFile_FO
* 函数说明: 重新生成一个文件,将原来存在的文件覆盖
* 输入 : char * pcFileName
* 输出 : int COMM_OK/COMM_ERR
***********************************************************************************************/
int ReCreateFile_FO(char * pcFileName)
{
FILE* pfFile;
/*==0==入参保护*/
if (NULL == pcFileName)goto __Error_Return;
/*==1==以创建新文件方式打开文件*/
if (NULL==(pfFile = fopen(pcFileName, "wb")))goto __Error_Return;
/*==2==关闭该文件*/
fclose(pfFile);
return COMM_OK;
__Error_Return:
return COMM_ERR ;
}
/*********************************************************************
* 函数名称: OpenFile_FO
* 函数说明: 打开指定文件,并初始化文件操作指针:重建(RECREATE)或者只读
* 输入 : ( void *buffer, size_t size, size_t count, FILE *stream );
* 输出 : int COMM_ERR/COMM_OK
***********************************************************************/
int OpenFile_FO(char* pcFilename, T_FILE_OPERATE_DES_FO* ptFilePointer , char* pcMode)
{
if (COMM_OK != InitFileOpeDes_FO(ptFilePointer, pcFilename))goto __Error_Return;
if (NULL == pcMode)return COMM_OK;
if (!strcmp(pcMode, "RECREATE"))ReCreateFile_FO( pcFilename);
return COMM_OK;
__Error_Return:
return COMM_ERR ;
}
/*********************************************************************
* 函数名称: ReadFile_FO
* 函数说明: 读取指定文件里的指定数据量到指定位置,并更新文件操作指针
* 输入 : ( void *buffer, size_t size, size_t count, FILE *stream );
* 输出 : size_t
***********************************************************************/
unsigned int ReadFile_FO(void *buffer, unsigned int nBuffSize, char* pcFilename,
unsigned int size, unsigned int count, T_FILE_OPERATE_DES_FO* ptFilePointer )
{
FILE* pfMate = NULL;
/*==0==入参保护*/
if ((count*size)>nBuffSize)goto __Error_Return;
/*==1==打开文件并操作文件*/
if(NULL == (pfMate = fopen(pcFilename, "rb+")))goto __Error_Return;
if (0 != fseek(pfMate, ptFilePointer->lOFilePointer, SEEK_SET))goto __Error_Return;
if (count != fread( buffer, size, count, pfMate ))goto __Normal_Return;
/*==2==更新文件操作*/
if (COMM_OK != UpdateOFilePointer_FO(ptFilePointer, ftell(pfMate)))goto __Error_Return;
/*==3==关闭文件*/
fclose(pfMate);
return count;
__Error_Return:
__Normal_Return:
if (NULL != pfMate)fclose(pfMate);
return 0 ;
}
/*********************************************************************
* 函数名称: ReadFile_Order_FO
* 函数说明: 顺序从操作文件中读取指定位置的数据,文件读完后退出终端
* 输入 : ( void *buffer, size_t size, size_t count, FILE *stream );
* 输出 : size_t
***********************************************************************/
unsigned int ReadFile_Order_FO(void *buffer, unsigned int nBuffSize, char* pcFilename,
unsigned int size, unsigned int count, T_FILE_OPERATE_DES_FO* ptFilePointer )
{
return ReadFile_FO(buffer, nBuffSize, pcFilename, size, count, ptFilePointer);
}
/*********************************************************************
* 函数名称: ReadFile_Cycle_FO
* 函数说明: 循环从操作文件中读取指定位置的数据,文件读完后返回到起始位置重新,不退出终端
* 输入 : ( void *buffer, size_t size, size_t count, FILE *stream );
* 输出 : size_t
***********************************************************************/
unsigned int ReadFile_Cycle_FO(void *buffer, unsigned int nBuffSize, char* pcFilename,
unsigned int size, unsigned int count, T_FILE_OPERATE_DES_FO* ptFilePointer )
{
int nReturn = ReadFile_FO(buffer, nBuffSize, pcFilename, size, count, ptFilePointer);
if (0 == nReturn)RewindOperateFile_FO(ptFilePointer),nReturn=ReadFile_FO(buffer, nBuffSize, pcFilename, size, count, ptFilePointer);
return nReturn;
}
typedef unsigned int ( *pfReadMateFile)(void *buffer, unsigned int nBuffSize, char* pcFilename, unsigned int size, unsigned int count, T_FILE_OPERATE_DES_FO* ptFilePointer );
pfReadMateFile g_pfReadMateFile[EN_READMATEFILE_MODE_FONUM] = {
ReadFile_Order_FO, /*EN_READMATEFILE_ORDER*/
ReadFile_Cycle_FO, /*EN_READMATEFILE_CYCLE*/
};
/*********************************************************************
* 函数名称
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
文件操作模块.rar (2个子文件)
FileOperate.h 5KB
FileOperate.c 9KB
共 2 条
- 1
资源评论
- 婉漪滟馨2013-06-05很好的资料,适合初学
- lakers20112012-12-21可以实现,谢谢分享,入门学习了
- daseven2017-10-11适合初学,不错
- chaofan1932013-09-27这个很不错,适合初学者学习
- a12524339132012-12-14很好的资料,适合初学,有帮助
meirux11
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功