fread,fwrite
2015-08-10 15:17
399 查看
1.函数原型
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参 数
buffer
用于接收数据的内存地址
size
要读的每个数据项的字节数,单位是字节
count
要读count个数据项,每个数据项size个字节.
stream
输入流
返回值
实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
2.size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite[1] 函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
2.eg
3.eg
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参 数
buffer
用于接收数据的内存地址
size
要读的每个数据项的字节数,单位是字节
count
要读count个数据项,每个数据项size个字节.
stream
输入流
返回值
实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
2.size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite[1] 函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
2.eg
#include <stdio.h> #include <string.h> struct mystruct { int i; char cha; }; int main(void) { FILE *stream; struct mystruct s; if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */ { fprintf(stderr, "Cannot open output file.\n"); return 1; } s.i = 0; s.cha = 'A'; fwrite(&s, sizeof(s), 1, stream); /* 写的struct文件*/ fclose(stream); /*关闭文件*/ return 0; } int main2(void) { FILE*stream; char msg[]="thisisatest"; char buf[20]; if((stream=fopen("DUMMY.FIL","w+"))==NULL) { fprintf(stderr,"Cannotopenoutputfile.\n"); return 0; } /*writesomedatatothefile*/ fwrite(msg,strlen(msg)+1,1,stream); /*sizeof(char)=1seektothebeginningofthefile*/ fseek(stream,0,SEEK_SET); /*readthedataanddisplayit*/ fread(buf,strlen(msg)+1,1,stream); printf("%s\n",buf); fclose(stream); return 0; }
3.eg
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //直接把内存数据 写入到 文件中 typedef struct Teacher { char name[64]; int age ; }Teacher; void main_fwrite() { int i = 0; FILE *fp = NULL; char *fileName = "c:/3.data"; Teacher tArray[3]; int myN = 0; for (i=0; i<3; i++) { sprintf(tArray[i].name, "%d%d%d", i+1, i+1, i+1); tArray[i].age = i + 31; } fp = fopen(fileName, "wb"); if (fp == NULL) { printf("建立文件失败\n"); return ; } for (i=0; i<3; i++) { //_Check_return_opt_ _CRTIMP size_t __cdecl // fwrite(_In_count_x_(_Size*_Count) const void * _Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE * _File); //函数参数 //_Str : 从内存块的开始 //_Size //内存打包技术 //_Count 写多少次 //_File : 写入到 文件指针 所指向的文件中 //函数的返回值 myN = fwrite( &tArray[i],sizeof(Teacher) , 1, fp); //myN 判断 有没有写满 磁盘 } if (fp != NULL) { fclose(fp); } } void main_fread() { int i = 0; FILE *fp = NULL; char *fileName = "c:/3.data"; Teacher tArray[3]; int myN = 0; fp = fopen(fileName, "r+b"); if (fp == NULL) { printf("建立文件失败\n"); return ; } for (i=0; i<3; i++) { //_Check_return_opt_ _CRTIMP size_t __cdecl // fread(_Out_bytecap_x_(_ElementSize*_Count) void * _DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE * _File); myN = fread(&[i], sizeof(Teacher), 1, fp); //函数的返回值 //myN = fwrite( &tArray[i],sizeof(Teacher) , 1, fp); //myN 判断 有没有写满 磁盘 } for (i=0; i<3; i++) { //sprintf(tArray[i].name, "%d%d%d", i+1, i+1, i+1); //tArray[i].age = i + 31; printf("name:%s, age:%d \n", tArray[i].name, tArray[i].age); } if (fp != NULL) { fclose(fp); } } void main() { //main_fwrite(); main_fread(); printf("hello...\n"); system("pause"); return ; }
相关文章推荐
- Linux运维 第四阶段 (四) MySQL锁、事务
- 不老的新丁 Python何以让人着迷
- 【dp】最大报销额
- 块体理论
- 不老的新丁 Python何以让人着迷
- 使用jdom操作xml文件 去除子节点带有命名空间
- 黑马程序员--IO流之字符流
- SharedPreferences
- Spark源码阅读笔记之MetadataCleaner
- 现代OpenGL教程 01 - 入门指南
- Zend Framework 中的autoloading使用
- 排序专题之归并排序
- PC110101(3n+1问题)(3n+1 Problem)
- POJ 3687 Labeling Balls(拓扑排序)
- 第一个项目所学记录
- NSDictionary及NSMutableDictionary
- android 水平平分两个按钮
- Redis 存储字符串和对象
- phpstorm设置编码 gbk gb2312 支持 asp
- ThreadLocal源码解析