Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64490
  • 博文数量: 32
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-02 09:11
文章分类

全部博文(32)

文章存档

2017年(21)

2016年(11)

我的朋友

分类: C/C++

2017-01-13 15:01:23

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、需要引入的头文件
  1. #include "stdafx.h"
  2. #include <iostream>
  3. using namespace std;
  4. #include <stdio.h>
2、读文件函数
  1. void read(char *pReadPath)
  2. {
  3.         char szBuf[256] = {0};
  4.         FILE *fd = NULL;
  5.         int count = 0;
  6.         int i = 0;
  7.         if(!(fd = fopen(pReadPath,"rb")))
  8.         {
  9.                 printf("无法打开此文件!\n");
  10.                 return;
  11.         }
  12.         //获取文件大小
  13.         fseek(fd,0,SEEK_END); //定位到文件末
  14.         int nFileLen = ftell(fd); //文件长度
  15.         //根据文件大小申请内存
  16.         char *p = (char*)malloc(sizeof(char)*nFileLen);
  17.         memset(p ,0,nFileLen);
  18.         //循环读文件
  19.         while(i< nFileLen)
  20.         {
  21.                 memset(szBuf, 0, sizeof(szBuf));
  22.                 fseek(fd,i,0);
  23.                 count = fread(szBuf, 1, sizeof(szBuf[0]), fd);
  24.                 memcpy(p+i, szBuf,count);
  25.                 i+=count;
  26.         }
  27.         fclose(fd);
  28.         fd = NULL;
  29.         delete []p;
  30. }
3、写文件函数
  1. void write(char *pWritePath, char *pStr, int count,bool isSuperaddtion = false)
  2. {
  3.         FILE *fpWrite;
  4.         char szBuf[256] = {0};
  5.         int nFileLen = 0;
  6.         if(!isSuperaddtion)
  7.         {
  8.                 if(!(fpWrite = fopen(pWritePath,"wb")))
  9.                 {
  10.                         printf("无法打开写文件!\n");
  11.                         return;
  12.                 }
  13.         }
  14.         else
  15.         {
  16.                 if(!(fpWrite = fopen(pWritePath,"ab")))
  17.                 {
  18.                         printf("无法打开写文件!\n");
  19.                         return;
  20.                 }
  21.                 //获取文件大小
  22.                 fseek(fpWrite,0,SEEK_END); //定位到文件末
  23.                 nFileLen = ftell(fpWrite); //文件长度
  24.         }

  25.         memset(szBuf, 0, sizeof(szBuf));
  26.         fseek(fpWrite, nFileLen, 0);
  27.         fwrite(pStr,count,1,fpWrite);

  28.         fclose(fpWrite);
  29. }
4、从一个文件中读取并写入的另一个文件
  1. void save(char *pReadPath, char *pWritePath)
  2. {
  3.         FILE *fpWrite;
  4.         FILE *fpRead;
  5.         char szBuf[256] = {0};
  6.         if(!(fpWrite = fopen(pWritePath,"wb")))
  7.         {
  8.                 printf("无法打开写文件!\n");
  9.                 return;
  10.         }
  11.         if(!(fpRead = fopen(pReadPath,"rb")))
  12.         {
  13.                 printf("无法打开读文件!\n");
  14.                 return;
  15.         }
  16.         //获取文件大小
  17.         fseek(fpRead,0,SEEK_END); //定位到文件末
  18.         int nFileLen = ftell(fpRead); //文件长度
  19.         int nOffset = 0;
  20.         int nCount = 0;
  21.         while (nOffset < nFileLen)
  22.         {
  23.                 memset(szBuf, 0, sizeof(szBuf));
  24.                 fseek(fpRead,nOffset,0);
  25.                 nCount = fread(szBuf, 1, sizeof(szBuf[0]), fpRead);
  26.                 fwrite(szBuf,nCount,1,fpWrite);
  27.                 nOffset += nCount;
  28.         }
  29.         fclose(fpWrite);
  30.         fclose(fpRead);
  31. }
5、主函数
  1. int _tmain(int argc, _TCHAR* argv[])
  2. {
  3.         //以下文件应该改为已存在的文件
  4.         char *readFileName = "c.bin";
  5.         char *pReadPath = "D:\\a.dat";
  6.         char *pWritePath = "b.dat";
  7.         save(pReadPath, pWritePath);
  8.         read(readFileName);
  9.         write(pWritePath,pReadPath,5,false);
  10.         return 0;
  11. }


阅读(1314) | 评论(0) | 转发(0) |
0

上一篇:shared_ptr总结

下一篇:auto_ptr智能指针

给主人留下些什么吧!~~