付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文件操作文件输入/输出C 语言的 I/O 操作使用标准库中的函数来实现文件输入和输出的数据可以用内部的二进制表示法传输文件输入和输出的数据也可以按文本格式传输文本流文本流是一系列字符,可以由许多行构成,每行由一个换行符终止在文本流中,可以根据情况需要对某些字符进行转换写(或读)的字符与外部设备上的字符可能不是一对一的关系同样,由于可能发生转换,写(或读)的字符数可能与外部设备上的字符数不同二进制流二进制流是一系列字节,并与外部设备上的字节一一对应写(或读)的字节数与外部设备上的字节数一样文件流是一系列独立的字节,没有任何标记用来指明文件的结束或记录的结束文件的结束是由文件大小来决定的文件文件可
2、以指任何设备,如磁盘文件、终端以及打印机 通过执行打开操作,文件可以与流进行关联;通过执行关闭操作,可以断开关联如果一个程序正常终止,所有文件都会自动关闭一旦程序崩溃,文件会保持打开状态基本的文件函数函数名功能fopen( ) 打开文件fclose( ) 关闭文件fputc( )将字符写入文件中fgetc( ) 从文件中读取字符fread() 将数据从文件中读到缓冲区fwrite() 将数据从缓冲区写入文件fseek( ) 在文件中搜索指定位置fprintf( ) 操作类似于 printf(),但是用于文件fscanf( ) 操作类似于 scanf(),但是用于文件feof( ) 如果到达文件
3、结尾,返回 trueferror( ) 如果出错,返回 truerewind( ) 将文件位置指示器重新置于文件开头remove( ) 删除文件fflush( ) 将内部缓冲区的数据写入指定文件文件指针文件指针是读写文件必需的文件指针指向一个结构,该结构包含以下信息:文件名、文件的当前位置、文件是否正在读或写、是否出错或是否到达文件末尾stdio.h 中定义了一个称为 FILE 的文件结构文件指针所需的唯一声明为:FILE *fp ;打开文本文件fopen() 函数打开一个流,并将其与一个文件关联起来fopen() 函数返回与该文件关联的文件指针fopen() 函数的原型为: FILE *fo
4、pen(const char *filename, const char *mode); 不以文件名后缀识别文件,即可以不以.txt为后缀例如:FILE *fp;if(fp=fopen(“c:a.txt”,”r”)=NULL)printf(“Cannot open filen”);模式含义r 打开文本文件进行读操作w 创建文本文件进行写操作a 向文本文件追加数据r+ 打开文本文件进行读/写操作(如果文件不存在,则打开失败)w+ 创建文本文件进行读/写操作(如果之前的存在则清空之前的)a+f 追加或创建文本文件进行读/写操作关闭文本文件ANSI C规定最多同时打开8个文件关闭文件可以释放系统资源
5、,并且能降低超出允许打开的文件个数的风险关闭流的同时也将清除所有相应的缓冲区fclose() 函数关闭通过调用 fopen() 而打开的流,若成功关闭文件,则返回整数值0。fclose() 函数的原型为: int fclose(FILE *fp); fcloseall() 函数用于关闭所有打开的流,若检测到任何错误则返回EOF(实际是一个字符)。注意:如果是在while(1)中给文件写入东西,然后写到一半直接关闭控制台以退出程序,则东西可能还在缓冲中没写入文件。向文本文件中写入字符流可以将逐个字符或将一个字符串写入文件中fputc() 用于将字符写入前面由 fopen() 打开的文件,若返回E
6、OF表示写入错误。fputc()函数的原型为:int fputc(int ch, FILE *fp); 例如:char ch;ch=getchar();if(fputc(ch,fp)=EOF)printf(“Write Errorn”);从文本文件中读取字符fgetc() 函数用于从使用 fopen() 以读模式打开的文件中读取字符fgetc() 函数的原型为:int fgetc(FILE *fp); fgetc() 函数从输入流中当前位置返回下一个字符,并增加文件位置指示器.若fgetc()返回EOF,则表示达到文件末尾。例如:ch=fgetc(fp);/从文件中读取字符fgetc和fput
7、c 练习: 读入文件c1.txt,在屏幕上输出。 读入文件c1.txt,在屏幕上输出。答案(1fputc.c):#include main() FILE *fp; char ch; if(fp=fopen(“d:jrzhexamplec1.txt”,“r+”)=NULL) /w+则是创建,会把之前的清空 printf(nCannot open file strike any key exit!); getch(); exit(1); ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); fclose(fp); 字符串 l/O函数 fpu
8、ts() 用于向磁盘文件写入字符串,fgets() 用于从磁盘文件读取字符串fputs() 函数将整个字符串写入指定的流中fgets() 函数从指定的流中读取一个字符串,直到读到一个换行符或已经读了字符串长度减 1(length-1)个字符其原型为: int fputs(const char *str, FILE *fp); 返回EOF表示写入错误 char *fgets( char *str, int length, FILE *fp); 返回的地址实际上就是str;返回NULL表示读取错误见示例。 fputs fgets 例子1:从 键盘输入一行字符,写入一个文件,再把该文件内容读出显示在
9、屏幕上(2fputs.c)。 #include main() FILE *fp; char ch,st20; char st220; if(fp=fopen(a.txt,w+)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); printf(input a string:n); scanf(%s,st); fputs(st,fp); rewind(fp); /方法一,逐个读ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(n);
10、 /方法二,读字符串rewind(fp); fgets(st2,4,fp);printf(%s,st2);printf(n); fclose(fp); 打开二进制文件fopen() 函数打开一个流,并将其与一个文件关联起来fopen() 函数返回与该文件关联的文件指针fopen() 函数的原型为:FILE *fopen(const char *filename, const char *mode); 例如:FILE *fp;if(fp=fopen(“c:a.txt”,”rb”)=NULL)printf(“Cannot open filen”);模式含义rb 打开二进制文件进行读操作wb 创建二
11、进制文件进行写操作ab 向二进制文件追加数据r+b 打开二进制文件进行读/写操作w+b 创建二进制文件进行读/写操作a+b 追加二进制文件进行读/写操作关闭二进制文件fclose() 函数关闭通过调用 fopen() 而打开的流fclose() 的原型为: int fclose(FILE *fp); fread() 和 fwrite()函数函数 fread() 和 fwrite() 称为无格式读或写函数它们用于从文件读取和向文件写入整块的数据最有价值的一个应用就是读写用户定义的数据类型,尤其是结构体这两个函数的原型为:size_t fread(void *buffer, size_t num_
12、bytes, size_t count, FILE *fp); size_t fwrite(const void *buffer, size_t num_bytes, size_t count, FILE *fp); 其中size_t是ANSI C附加类型,是无符号整数。函数fread ()返回值是读取对象的数目,若返回0表示到达文件结尾或出现错误。函数fwrite ()返回写入文件的对象数目,若该值小于count,说明有错误。fread() 和 fwrite()函数例子: double d8 = 3,54;double d28;fwrite(d,sizeof(double),2,fp);re
13、wind(fp);fread(d2,sizeof(double),1,fp);结构体写入文件:struct stuint rollno; char name20;int age; studSIZE;fwrite(stud,sizeof(struct stu),SIZE,fp);见:Example2.cpp,fwriteStudentFile.cppfread 和 fwrite例子:从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上(3fread.c)。 #include struct stu char name10; int num; int age; char add
14、r15; boya2,boyb2,*pp,*qq; main() FILE *fp; char ch; int i; pp=boya; qq=boyb; if(fp=fopen(d:jrzhexamplestu_list,wb+)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); printf(ninput datan); for(i=0;iname,&pp-num,&pp-age,pp-addr); pp=boya; fwrite(pp,sizeof(struct stu),2,fp); rewind
15、(fp); fread(qq,sizeof(struct stu),2,fp); printf(nnnametnumber age addrn); for(i=0;iname,qq-num,qq-age,qq-addr); fclose(fp); 使用 feof()如果到达文件末尾,函数 feof() 返回 true,否则将返回 false(0)在读取二进制数据时使用该函数其原型为: int feof (FILE *fp); 例如:while(!feof(fp) (使用feof()要注意,如果文件指针后面没数字了的话,它认为文件指针所指的下一个位置才是文件的末尾,并把前一个数字返回,所以最后一
16、个数字会被读2次)rewind() 函数rewind() 函数将文件位置指示器置于文件开头它将文件指针作为自己的参数当文件以读写方式打开时,即可以读也可以写。语法: rewind(fp ); ferror() 函数ferror() 函数用以判断文件操作是否出错由于每个操作都设置了出错条件,所以应在每个操作后立即调用 ferror() ,否则可能会遗漏错误其原型为:int ferror(FILE *fp); 若返回值为True,则表示操作时出错。删除文件(4remove.c)remove() 函数用于删除指定文件。其原型为: int remove(char *filename); 若删除成功则返
17、回0,否则返回非0值。例如:if(remove(“testString”)printf(“删除失败!n”);当前活动指针(4remove.c)FILE 结构提供了一个指针,用以跟踪发生 I/O 操作的位置每当从流中读取或写入一个字符,当前活动指针(即 curp)就会向前移动当前活动指针的当前位置可以借助 ftell() 函数来获得,返回相对于文件开头的位置。其原型为: long int ftell(FILE *fp); 设置当前位置 2-1 (4remove.c)fseek() 函数通过指定相对于开始位置、当前位置或流的末尾位置的字节数来重定位 curp,这取决于 fseek() 函数中指定的
18、位置其原型为: int fseek (FILE *fp, long int offset, int origin); origin 表示搜索的起始位置,有以下几个值:Origin 文件位置SEEK_SET 或 0文件开始SEEK_CUR 或 1当前文件指针的位置SEEK_END 或 2文件末尾fprintf() 和 fscanf() 2-1缓冲 I/O 系统还包括 fprintf() 和 fscanf() 函数。写入数据到文件在这里使用的是函数fprintf(),格式:fprintf(文件指针,格式符,输出表列);例如:fprintf(fp,%d,rollno);而从文件读取数据输入到计算机使
19、用的是fscanf()fscanf(文件指针,格式符,输入表列);例如:fscanf(fp,%d%s%d,&rollno,name,&age);fprintf() 和 fscanf() 2-2尽管 fprintf() 和 fscanf() 是最容易的方法,但它们的效率并不总是最高的就速度或文件大小而言,fread() 和 fwrite() 是较好的选择fprintf() 和 fscanf() 例子 fprintf.c#include main() FILE *fp; char ch = a,ch2; int i = 3,i2; char s10 ;if(fp=fopen(su,w+)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); fprintf( fp, %s%c, hello, ch );fprintf( fp, %dn, i );rewi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026青海黄南州同德县紧密型县域医共体招聘2人备考题库含答案详解(研优卷)
- 2026云南昆明医科大学第一附属医院招聘项目制科研助理人员(第一批次)5人备考题库及答案详解(新)
- 2026浙江台州市温岭市市场监督管理局招聘编外人员3人备考题库含答案详解(满分必刷)
- 2026云南昆明血液中心编外人员招聘4人备考题库附答案详解(a卷)
- 2026宁夏回族自治区林业和草原局自主招聘高层次人才3人备考题库及答案详解(夺冠系列)
- 2026江西安吉吉州区永叔街道华平社区招聘就业见习人员2人备考题库及答案详解(易错题)
- 2026广东广州市黄埔区老人院招聘备考题库附答案详解(a卷)
- 2026湖南益阳市消防救援支队消防文员招聘3人备考题库附答案详解(精练)
- 2026中山大学孙逸仙纪念医院心血管内科心电图室医教研岗位人员招聘1人备考题库及参考答案详解1套
- 攀枝花市2026年春季综合类事业单位引才(第二批)盐边县岗位考核的备考题库附答案详解(黄金题型)
- 2026年黑龙江省《保密知识竞赛必刷100题》考试题库带答案详解(基础题)
- 2026乌鲁木齐市招聘警务辅助人员(1134人)建设笔试备考试题及答案解析
- 2026上海春季高考语文试题试题含答案
- 蝶阀维修施工方案(3篇)
- 2026年济南历城区九年级中考英语一模考试试题(含答案)
- 内蒙古呼和浩特市北兴产业投资发展有限责任公司招聘笔试题库2026
- 陕西省西安市长安区2023-2024学年八年级下学期期中数学试题(含答案)
- JGT366-2012 外墙保温用锚栓
- DB63∕T 1723-2018 石棉尾矿污染控制技术规范
- 年产5万吨乙酸乙酯生产工艺的设计
- 中国甲状腺疾病诊治指南
评论
0/150
提交评论