c语言读写文件的相关函数的介绍:需要引入头文件:#include
1、 FILE * fopen(const char * path,const char * mode)
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
参数说明:
①path:字符串包含欲打开的文件路径及文件名;
②mode:字符串则代表文件打开方式,打开方式由于过多只介绍本例涉及的几个。
“rb” 只读打开一个二进制文件,只允许读数据;
“wb” 只写打开或建立一个二进制文件,只允许写数据;
“ab” 追加打开一个二进制文件,并在文件末尾写数据。
2、 size_t fread ( void *buffer, size_t size, size_t count, FILE *stream)
返回值:如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
参数说明:
①buffer:用于接收数据的内存地址;
②size:要读的每个数据项的字节数,单位是字节,一般为1;
③count:要读count个数据项,每个数据项size个字节;
④stream:stream:目标文件指针。
3、 size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream)
返回值:返回实际写入的数据项个数count
参数说明:
①buffer:是一个指针,对fwrite来说,是要获取数据的地址;
②size:要写入内容的单字节数;
③count:要进行写入size字节的数据项的个数;
④stream:目标文件指针。
4、 int fseek( FILE *stream, long offset, int origin )
返回值:成功,返回0,失败返回-1,并设置error的值,可以用perror()函数输出错误。
参数说明:
①stream:为文件指针;
②offset:为偏移量,正数表示正向偏移,负数表示负向偏移;
③origin:设定从文件的哪里开始偏移,可能取值为SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件结尾),其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2。
5、 long ftell(FILE *stream)
返回值:返回文件位置指针当前位置相对于文件首的偏移字节数。
参数说明:
①stream:为文件指针。
下面给出以上相关函数组合使用完成文件读写操作的小程序。
1、需要引入的头文件
-
#include "stdafx.h"
-
#include <iostream>
-
using namespace std;
-
#include <stdio.h>
2、读文件函数
-
void read(char *pReadPath)
-
{
-
char szBuf[256] = {0};
-
FILE *fd = NULL;
-
int count = 0;
-
int i = 0;
-
if(!(fd = fopen(pReadPath,"rb")))
-
{
-
printf("无法打开此文件!\n");
-
return;
-
}
-
//获取文件大小
-
fseek(fd,0,SEEK_END); //定位到文件末
-
int nFileLen = ftell(fd); //文件长度
-
//根据文件大小申请内存
-
char *p = (char*)malloc(sizeof(char)*nFileLen);
-
memset(p ,0,nFileLen);
-
//循环读文件
-
while(i< nFileLen)
-
{
-
memset(szBuf, 0, sizeof(szBuf));
-
fseek(fd,i,0);
-
count = fread(szBuf, 1, sizeof(szBuf[0]), fd);
-
memcpy(p+i, szBuf,count);
-
i+=count;
-
}
-
fclose(fd);
-
fd = NULL;
-
delete []p;
-
}
3、写文件函数
-
void write(char *pWritePath, char *pStr, int count,bool isSuperaddtion = false)
-
{
-
FILE *fpWrite;
-
char szBuf[256] = {0};
-
int nFileLen = 0;
-
if(!isSuperaddtion)
-
{
-
if(!(fpWrite = fopen(pWritePath,"wb")))
-
{
-
printf("无法打开写文件!\n");
-
return;
-
}
-
}
-
else
-
{
-
if(!(fpWrite = fopen(pWritePath,"ab")))
-
{
-
printf("无法打开写文件!\n");
-
return;
-
}
-
//获取文件大小
-
fseek(fpWrite,0,SEEK_END); //定位到文件末
-
nFileLen = ftell(fpWrite); //文件长度
-
}
-
-
memset(szBuf, 0, sizeof(szBuf));
-
fseek(fpWrite, nFileLen, 0);
-
fwrite(pStr,count,1,fpWrite);
-
-
fclose(fpWrite);
-
}
4、从一个文件中读取并写入的另一个文件
-
void save(char *pReadPath, char *pWritePath)
-
{
-
FILE *fpWrite;
-
FILE *fpRead;
-
char szBuf[256] = {0};
-
if(!(fpWrite = fopen(pWritePath,"wb")))
-
{
-
printf("无法打开写文件!\n");
-
return;
-
}
-
if(!(fpRead = fopen(pReadPath,"rb")))
-
{
-
printf("无法打开读文件!\n");
-
return;
-
}
-
//获取文件大小
-
fseek(fpRead,0,SEEK_END); //定位到文件末
-
int nFileLen = ftell(fpRead); //文件长度
-
int nOffset = 0;
-
int nCount = 0;
-
while (nOffset < nFileLen)
-
{
-
memset(szBuf, 0, sizeof(szBuf));
-
fseek(fpRead,nOffset,0);
-
nCount = fread(szBuf, 1, sizeof(szBuf[0]), fpRead);
-
fwrite(szBuf,nCount,1,fpWrite);
-
nOffset += nCount;
-
}
-
fclose(fpWrite);
-
fclose(fpRead);
-
}
5、主函数
-
int _tmain(int argc, _TCHAR* argv[])
-
{
-
//以下文件应该改为已存在的文件
-
char *readFileName = "c.bin";
-
char *pReadPath = "D:\\a.dat";
-
char *pWritePath = "b.dat";
-
save(pReadPath, pWritePath);
-
read(readFileName);
-
write(pWritePath,pReadPath,5,false);
-
return 0;
-
}
阅读(1314) | 评论(0) | 转发(0) |