fread函数和fwrite函数
2010年06月28日
In fact, a good percentage of the total code in a program consists of nothing but error checking. /* 人生就像一盒巧克力,你永远也不知道你将得到什么.你只有亲自去品味她的苦涩和缠绵.我们在平淡中体味彼此的真实.在明媚的月光下,在雨后的操场,或者, 在一首老歌的旋律当中…… */ #include int main(void){ int money = 1; int girl = 1; for( ; 1; money++, girl++ ) printf("I have money \n I have girl \n"); return 1; }
fread函数和fwrite函数 1.函数功能 用来读写一个数据块。 2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 3.说明 (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。 (2)size:要读写的字节数; (3)count:要进行读写多少个size字节的数据项; (4)fp:文件型指针。 4.举例 例1 从键盘输入4个学生的有关数据,然后把它们转存到磁盘文件上去。 (1)算法分析; (2)程序参见:li13-3.c 例2 从例1生成的文件中读入有关数据,然后把它们在屏幕上输出。 (1)算法分析; (2)程序参见:li13-4.c ※ fwrite,fread,fopen读写结构体。※ 用fwrite,fread来读写文件,总结都在代码注释之中,注意读写的时候用了二进制模式,用文本模式会出现问题。 #i nclude "iostream" #i nclude "iomanip" using namespace std; typedef struct tagTEST { char Name[40]; int Size; int Array[200]; }TEST,*PTEST; void OutPut(TEST *S) { coutNameSizeArray[i]; if(++i%8==0) coutread file example"); myTest.Size=sizeof(TEST); for(int i=0;i不能创建文件"C语言还提供了用于整块数据的读写函数。 可用来读写一组数据,如一个数组元素,一个结构变量的值等。读数据块函数调用的一般形式为: fread(buffer,size,count,fp); 写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp); 其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。 size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。 例如: fread(fa,4,5,fp); 其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。 [例10.6]从键盘输入两个学生数据,写入一个文件中, 再读出这两个学生的数据显示在屏幕上。 #include struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;iname,&pp->num,&pp->age,pp->addr); pp=boya; fwrite(pp,sizeof(struct stu),2,fp); rewind(fp); fread(qq,sizeof(struct stu),2,fp); printf("\n\nname\tnumber age addr\n"); for(i=0;iname,qq->num,qq->age,qq->a ddr); fclose(fp); } 本例程序定义了一个结构stu,说明了两个结构数组boya和 boyb以及两个结构指针变量pp和qq。pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件"stu_list",输入二个学生数据之后,写入该文件中, 然后把文件内部位置指针移到文件首,读出两块学生数据后,在屏幕上显示。 格式化读写函数fscanf和fprintf fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。 两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如: fscanf(fp,"%d%s",&i,s); fprintf(fp,"%d%c",j,ch); 用fscanf和fprintf函数也可以完成例10.6的问题。修改后的程序如例10.7所示。 [例10.7] #include struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;iname,&pp->num,&pp->age,pp->addr); pp=boya; for(i=0;iname,pp->num,pp->age,pp-> addr); rewind(fp); for(i=0;iname,&qq->num,&qq->age,qq->addr); printf("\n\nname\tnumber age addr\n"); qq=boyb; for(i=0;iname,qq->num, qq->age, qq->addr); fclose(fp); } 与例10.6相比,本程序中fscanf和fprintf函数每次只能读写一个结构数组元素,因此采用了循环语句来读写全部数组元素。 还要注意指针变量pp,qq由于循环改变了它们的值,因此在程序的25和32行分别对它们重新赋予了数组的首地址。 文件的随机读写 前面介绍的对文件的读写方式都是顺序读写, 即读写文件只能从头开始,顺序读写各个数据。但在实际问题中常要求只读写文件中某一指定的部分。 为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个,即 rewind 函数和fseek函数。 rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。 下面主要介绍 fseek 函数。 fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点);其中:"文件指针"指向被移动的文件。 "位移量"表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀"L"。"起始点"表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。 其表示方法如表10.2。 起始点 表示符号 数字表示 ────────────────────────── 文件首 SEEK-SET 0 当前位置 SEEK-CUR 1 文件末尾 SEEK-END 2 例如: fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后,即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。 [例10.8]在学生文件stu list中读出第二个学生的数据。 #include struct stu { char name[10]; int num; int age; char addr[15]; }boy,*qq; main() { FILE *fp; char ch; int i=1; qq=&boy; if((fp=fopen("stu_list","rb"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } rewind(fp); fseek(fp,i*sizeof(struct stu),0); fread(qq,sizeof(struct stu),1,fp); printf("\n\nname\tnumber age addr\n"); printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age, qq->addr); } 文件stu_list已由例10.6的程序建立,本程序用随机读出的方法读出第二个学生的数据。程序中定义boy为stu类型变量,qq为指向 boy的指针。以读二进制文件方式打开文件,程序第22行移动文件位置指针。其中的i值为1,表示从文件头开始,移动一个stu类型的长度,然后再读出的数据即为第二个学生的数据。 文件检测函数 C语言中常用的文件检测函数有以下几个。 一、文件结束检测函数feof函数调用格式: feof(文件指针); 功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。 二、读写文件出错检测函数ferror函数调用格式: ferror(文件指针); 功能:检查文件在用各种输入输出函数进行读写时是否出错。 如ferror返回值为0表示未出错,否则表示有错。 三、文件出错标志和文件结束标志置0函数clearerr函数调用格式: clearerr(文件指针); 功能:本函数用于清除出错标志和文件结束标志,使它们为0值。 C库文件 C系统提供了丰富的系统文件,称为库文件,C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过。在".h"文件中包含了常量定义、类型定义、宏定义、函数原型以及各种编译选择设置等信息。另一类是函数库,包括了各种函数的目标代码,供用户在程序中调用。通常在程序中调用一个库函数时,要在调用之前包含该函数原型所在的".h" 文件。 在附录中给出了全部库函数。 ALLOC.H 说明内存管理函数(分配、释放等)。 ASSERT.H 定义 assert调试宏。 BIOS.H 说明调用IBM-PC ROM BIOS子程序的各个函数。 CONIO.H 说明调用DOS控制台I/O子程序的各个函数。 CTYPE.H 包含有关字符分类及转换的名类信息(如 isalpha和toascii等)。 DIR.H 包含有关目录和路径的结构、宏定义和函数。 DOS.H 定义和说明MSDOS和8086调用的一些常量和函数。 ERRON.H 定义错误代码的助记符。 FCNTL.H 定义在与open库子程序连接时的符号常量。 FLOAT.H 包含有关浮点运算的一些参数和函数。 GRAPHICS.H 说明有关图形功能的各个函数,图形错误代码的常量定义,正对不同驱动程序的各种颜色值,及函数用到的一些特殊结构。 IO.H 包含低级I/O子程序的结构和说明。 LIMIT.H 包含各环境参数、编译时间限制、数的范围等信息。 MATH.H 说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的特殊结构。 MEM.H 说明一些内存操作函数(其中大多数也在STRING.H 中说明)。 PROCESS.H 说明进程管理的各个函数,spawn…和EXEC …函数的结构说明。 SETJMP.H 定义longjmp和setjmp函数用到的jmp buf类型, 说明这两个函数。 SHARE.H 定义文件共享函数的参数。 SIGNAL.H 定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,说明rajse和signal两个函数。 STDARG.H 定义读函数参数表的宏。(如vprintf,vscarf函数)。 STDDEF.H 定义一些公共数据类型和宏。 STDIO.H 定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流:stdin,stdout和stderr,说明 I/O流子程序。 STDLIB.H 说明一些常用的子程序:转换子程序、搜索/ 排序子程序等。 STRING.H 说明一些串操作和内存操作函数。 SYS\STAT.H 定义在打开和创建文件时用到的一些符号常量。 SYS\TYPES.H 说明ftime函数和timeb结构。 SYS\TIME.H 定义时间的类型time[ZZ(Z] [ZZ)]t。 TIME.H 定义时间转换子程序asctime、localtime和gmtime的结构,ctime、 difftime、 gmtime、 localtime和stime用到的类型,并提供这些函数的原型。 VALUE.H 定义一些重要常量, 包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量,包括浮点和双精度值的范围。
发表评论
-
VBS脚本常用经典代码收集
2012-01-20 02:13 699VBS脚本常用经典代码收集 2010年06月21日 1. ... -
多线程加速图像模板匹配
2012-01-20 02:13 642多线程加速图像模板匹 ... -
Java编程思想――并发(3)
2012-01-20 02:13 843Java编程思想――并发(3) 2010年07月28日 ... -
ORACLE PL/SQL编程详解之七 程序包的创建与应用
2012-01-20 02:13 661ORACLE PL/SQL编程详解之七 ... -
[耀湾/微亚细亚] 夜降り萃梦乡 FIN.
2012-01-19 10:03 646[耀湾/微亚细亚] 夜降り萃梦乡 FIN. 2009年02月 ... -
她为我写的 ..........你就是我的天使…………
2012-01-19 10:03 543她为我写的 ..........你就是我的天使………… 2 ... -
D---的记忆3
2012-01-19 10:03 622D---的记忆3 2008年10月12日 一、洞察 ... -
《因为是你》--2
2012-01-19 10:03 621《因为是你》--2 2012年01月13日 兼职保姆 ... -
如何有效维护和发布“Windows + Android SDK + Eclipse”开发环境下的apk和代码
2012-01-17 02:44 998如何有效维护和发布“Windows + Android SDK ... -
Kinect for Windows SDK beta 放出
2012-01-17 02:43 564Kinect for Windows SDK beta 放出 ... -
Windows SDK编程(Delphi版) 之 消息处理
2012-01-17 02:43 799Windows SDK编程(Delphi版) ... -
Windows Mobile 6 SDK及中文版模拟器下载地址
2012-01-17 02:43 1503Windows Mobile 6 SDK及中文版模拟器下载地址 ... -
SDK 问题
2012-01-17 02:43 655SDK 问题 5小时前 问题:点击AVD Manager ... -
回顾日志_20110609
2012-01-15 22:20 470回顾日志_20110609 2011年06月09日 先来 ... -
笔记66-67
2012-01-15 22:19 593笔记66-67 2010年06月02日 ... -
FLEX网站收集
2012-01-15 22:19 889FLEX网站收集 2009年12月19日 1.FLEX网 ... -
ActionScript3.0 垃圾回收机制 2010-4-19 雨
2012-01-15 22:19 625ActionScript3.0 垃圾回收机制 2010-4-1 ... -
SNS网站设计的几大技术支持
2012-01-15 22:19 718SNS网站设计的几大技术支持 2010年04月04日 第 ...
相关推荐
C语言fread函数和fwrite函数的用法及其实例[收集].pdf
C语言fread函数和fwrite函数的用法及其实例
/* 从键盘输入4个学生的有关数据,然后把它们转存到磁盘文件上去 */ #include #define SIZE 4 struct student_type { char name[10]; int num; int age; char addr[15]; }stud[SIZE]; ...……
fread,fwrite的参数2,3顺序 为什么fread读出来的文件大小不对
C语言文件读写函数,fread,fwrite函数的使用。 简单实例,仅供参考。
为什么fread(),fwrite()的返回值总是为0,但是文件读写正常 初学C语言文件操作的新人,总会犯这个错误,明明文件读 写成功 ,但是返回值总是为0,而不是读写成功的字节数,原因是因为...
字符读写函数:(fgetc和fputc) fputc函数:把一个字符写到磁盘文件上。具体格式如下:fputc...读写数据块函数(fread和fwrite) 一般调用形式为:fread(buffer,size,count,fp) fwrite(buffer,size,count,fp)
使用场景及目标以实际应用为导向,通过详细的代码示例和解析,帮助读者在实际编程中灵活运用文件操作。例如,在开发数据处理软件、日志系统、配置文件读写等场景中,本资源的内容将发挥重要作用。学习本资源后,你将...
这些函数包括fopen()用于打开文件,fclose()用于关闭文件,fprintf()和fscanf()用于格式化读写,以及fread()和fwrite()用于二进制读写等。 首先,要使用文件读写函数,你需要包含stdio.h头文件。然后,你可以使用...
卷曲fopen、fread、fwrite 等所有函数在许多 C 程序中都很常见并且是标准的“习惯用法”。 通过提供具有与基于文件的版本相同的一般行为的 fcurl* 函数,但允许 URL 以其他方式使用文件名,这是一种尝试,允许现有的...
实现了一个文档的分段读写,使用的函数是fread和fwrite
liunix下常用c的文件读写函数比较,fprintf/fscanf,read/write,fread/fwrite等。
例如,fread函数可以从文件中读取指定数量的字节,而fwrite函数则可以将数据以字节的形式写入文件。这种操作方式使得C语言文件读写具有高度的灵活性和可移植性。 此外,C语言还支持文本模式和二进制模式两种文件...
C语言文件处理总结 包含各种函数 fopen,fclose,fputc,fgetc,fscanf,fprintf,fread,fwrite,rewind,fseek,ftell,ferror,clearerr
比用fread/fwrite的方式速度快了不少的读写文件方式。其中包括了读写文本文件和二进制文件的函数。
如果希望读取多行内容,需要使用 fread 函数;相应地写入函数为 fwrite。 fread() 函数用来从指定文件中读取块数据。所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并...
对这些函数有详细解释和用例: fopen() 打开流 fclose() 关闭流 fputc() 写一个字符到流中 fgetc() 从流中读一个字符 fseek() 在流中定位到指定的字符 fputs() 写字符串到流 fgets() 从流中读一行或指定个...
25.19 fwrite函数 25.20 gete函数 25.21 getchar函数 25.22 gets函数 25.23 perror函数 25.24 prinff函数 25.25 putc函数 25.26 putchar函数 25.27 puts函数 25.28 remove函数 25.29 rename函数 25.30 rewind函数 ...
1. 返回整数的getchar函数 2. 输入fread和输出fwrite同时操作,需在其中插入fseek函数的调用 3. 调用库函数时,应该先检查作为错误指示
如果希望读取多行内容,需要使用 fread 函数;相应地写入函数为 fwrite。 fread() 函数用来从指定文件中读取块数据。所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并...