C语言程序设计文件_第1页
C语言程序设计文件_第2页
C语言程序设计文件_第3页
C语言程序设计文件_第4页
C语言程序设计文件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

11.1C文件概述11.2文件类型指针11.3文件的打开与关闭11.4文件的读写11.5文件的定位第11章文件2/4/20231《C语言程序设计》-第十一章11.1C文件概述文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。文件分类:按存储介质:普通文件:存储介质文件(磁盘、磁带等)。设备文件:非存储介质(键盘、显示器、打印机等)。按数据的组织形式:ASCII文件(文本文件):每个字节存放ASCII码,表示一个字符。二进制文件:数据按其在内存中的存储形式原样存放。2/4/20232《C语言程序设计》-第十一章例:整数100000010011100010000内存存储形式0010011100010000二进制形式0011000100110000001100000011000000110000ASCII形式文本文件特点:存储量大,转换为二进制速度慢,直观易记。二进制文件特点:存储量小,无需转换。但因一个字节不对应一个字符,故不能直接输出其字符形式。2/4/20233《C语言程序设计》-第十一章

文件系统缓冲文件系统(高级文件系统):系统自动为正在使用的文件开辟内存缓冲区。非缓冲文件系统(低级文件系统):由用户在程序中为每个文件设定缓冲区。磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统缓冲区指令区程序用户数据区磁盘文件非缓冲文件系统2/4/20234《C语言程序设计》-第十一章11.2文件类型指针文件类型结构体FILE

缓冲文件系统为每个正使用的文件在内存开辟文件信息区。文件信息用系统定义的名为FILE的结构体描述。FILE定义在stdio.h中。typedef

struct/*TurboC文件类型声明*/{shortlevel;/*缓冲区满/空程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*若无缓冲区不读取字符*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*数据传送缓冲区位置*/unsignedchar*curp;/*当前读写位置*/unsignedistemp;/*临时文件指示*/shorttoken;/*用作无效检测*/}FILE;/*结构体类型名FILE*/2/4/20235《C语言程序设计》-第十一章文件指针定义形式FILE*文件结构指针名;用法:文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件。文件关闭后,它的文件结构体被释放。文件名文件使用方式文件类型指针C程序操作系统磁盘FILE*fp;2/4/20236《C语言程序设计》-第十一章打开文件fopen函数首部:

FILE*fopen(char*filename,char*mode)功能:按指定方式打开文件。返值:正常打开,为指向文件结构体的指针;打开失败,为NULL。11.3文件的打开与关闭要打开的文件名使用文件方式例:文件打开与测试。

FILE*fp;if((fp=fopen(“filename”,“rb+”))==NULL){printf(“cannotopenthisfile\n”);exit(0);}例FILE*fp;

fp=fopen(“c:\test”,”rb+”);

“r+/rb+”(读写)“a/ab”(追加)“w/wb”(只写)“r/rb”(只读)“w+/wb+”(读写)“a+/ab+”(读写)为输入打开一个文本/二进制文件为输出打开或建立一个文本/二进制文件为读/写打开一个文本/二进制文件为读/写建立一个文本/二进制文件为读/写打开或建立一个文本/二进制文件向文本/二进制文件尾追加数据文件使用方式含义系统自动打开和关闭的五个标准设备文件:文件号文件指针标准文件0stdin标准输入(键盘)1stdout标准输出(显示器)2stderr标准错误(显示器)3stdaux标准辅助(辅助设备端口)4stdprn标准打印(打印机)2/4/20237《C语言程序设计》-第十一章文件关闭fclose函数首部:int

fclose(FILE*fp)功能:关闭fp指向的文件,释放文件结构体和文件指针。返值:正常为0;出错为非0。文件打开时返回的文件类型指针磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:fclose不关闭文件可能会丢失数据2/4/20238《C语言程序设计》-第十一章11.4文件的读写字符输出fputc函数原型:int

fputc(int

ch,FILE*fp)功能:把一字符ch写入fp指向的文件中。返值:正常,返回ch;出错,为EOF。字符输入fgetc函数原型:int

fgetc(FILE*fp)功能:从fp指向的文件中读取一个字符。返值:正常,返回读取的字符;读到文件尾或出错时,为EOF。

文件I/O与终端I/O#defineputc(ch,fp)fputc(ch,fp)#definegetc(fp)fgetc(fp)#defineputchar(ch)fputc(ch,stdout)#definegetchar()fgetc(stdin)2/4/20239《C语言程序设计》-第十一章[例]从键盘输入一些字符,逐个把它们存到磁盘文件中,直到输入‘#“结束。#include"stdio.h"main(){charch,filename[20];FILE*fp;

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL){printf("cannotopenthisfile\n");exit(0);}

while((ch=getchar())!='#')

{

fputc(ch,fp);

putchar(ch);}

fclose(fp);}file1.txtComputerandC#computerandCC:>typefile1.txtComputerandc2/4/202310《C语言程序设计》-第十一章文件结束feof函数原型:int

feof(FILE*fp)功能:判断文件是否结束。返值:文件结束,返回真(非0);文件未结束,返回0。2/4/202311《C语言程序设计》-第十一章字符串输入

fgets函数首部:

char*fgets(char*str,intlength,FILE*fp);功能:从fp所指向的文件中,至多读length-1个字符,送入字符数组str中,如果在读入length-1个字符结束前遇换行符或EOF,读入即结束,字符串读入后在最后加一个‘\0’字符。返值:正常,返str指针;出错,返空指针NULL。字符串输出fputs函数首部:int

fputs(char*str,FILE*fp);功能:把str指向的字符串写入fp指向的文件。返值:正常,返0;出错返EOF。2/4/202312《C语言程序设计》-第十一章#include"stdio.h"#defineSIZE256main(){charch[SIZE];

intc,line;FILE*fp;

if((fp=fopen(“test.txt"

,"r"))==NULL){

printf(“Thefilecannotopen\n");exit(0);}line=1;

while(fgets(ch,SIZE,fp)!=NULL)printf("%4d\t%s\n",line++,ch);

fclose(fp);}[例]读取文本文件的内容,并加上行号显示。2/4/202313《C语言程序设计》-第十一章字段输入fread/输出fwrite函数首部:int

fread(void*buffer,intnum_bytes,intcount,FILE*fp);int

fwrite(void*buffer,intnum_bytes,intcount,FILE*fp);功能:读/写数据块。返值:成功,返回读/写的字段数;出错或文件结束,返回0。说明:buffer:指向要输入/输出数据存储区的首地址的指针num_bytes:每个要读/写的字段的字节数count:要读/写的字段的个数fp:要读/写的文件指针fread与fwrite

一般用于二进制文件的输入/输出。2/4/202314《C语言程序设计》-第十一章例floatf[2];FILE*fp;

fp=fopen(“aa.dat”,“rb”);

fread(f,4,2,fp);for(i=0;i<2;i++)

fread(&f[i],4,1,fp);例structstudent{intnum;charname[20];charsex;

intage;floatscore[3];}stud[10];for(i=0;i<10;i++)

fread(&stud[i],sizeof(structstudent),1,fp);2/4/202315《C语言程序设计》-第十一章格式化输入fscanf/输出fprintf函数首部:

int

fscanf(FILE*fp,char*format,arg_list);

int

fprintf(FILE*fp,constchar*format,arg_list);功能:按format格式对fp指向的文件进行I/O操作。返值:成功,返回I/O的个数;出错或文件尾,返回EOF。例fscanf(fp,“%d%f”,&i,&f);

//若文件中有3,4.5,则将3送入i,4.5送入f

fprintf(fp,“%d,%f”,i,f);

///将i和t按%d,%f格式输出到fp文件例:从键盘按格式输入数据存到磁盘文件中去,并回显到屏幕上。#include<stdio.h>main(){chars[80],c[80];

inta,b;FILE*fp;

if((fp=fopen("test","w"))==NULL){puts("can'topenfile");exit();}

fscanf(stdin,“%s%d”,s,&a);/*键盘输入*/

fprintf(fp,“%s%d”,s,a);/*写入文件*/

fclose(fp);

if((fp=fopen("test","r"))==NULL){puts("can'topenfile");exit();}

fscanf(fp,“%s%d”,c,&b);/*从文件读出*/

fprintf(stdout,“%s%d”,c,b);/*屏幕显示*/

fclose(fp);}2/4/202316《C语言程序设计》-第十一章11.5文件的定位文件位置指针:指向当前读写位置的指针。读写方式:顺序读写:位置指针按字节位置顺序移动。随机读写:位置指针按需要移动到任意位置。

rewind函数函数首部:voidrewind(FILE*fp);功能:使fp所指文件的位置指针重置到文件开头。返值:无例:对一个磁盘文件进行显示和复制两次操作。#include<stdio.h>main(){FILE*fp1,*fp2;fp1=fopen("d:\\fengyi\\bkc\\ch12_4.c","r");fp2=fopen("d:\\fengyi\\bkc\\ch12_41.c","w");while(!feof(fp1))putchar(getc(fp1));

rewind(fp1);while(!feof(fp1))putc(getc(fp1),fp2);

fclose(fp1);fclose(fp2);}2/4/202317《C语言程序设计》-第十一章

fseek函数函数原型:int

fseek(FILE*fp,long

offset,intorigin);功能:改变文件位置指针的位置。返值:成功,返回0;失败,返回非0值。文件指针位移量(以起始点为基点,移动的字节数)>0

向后移动<0

向前移动起始点文件开始

SEEK_SET0文件当前位置

SEEK_CUR1文件末尾

SEEK_END2

fseek(fp,100L,0);fseek(fp,-20L,SEEK_END);fseek(fp,50L,1);

2/4/202318《C语言程序设计》-第十一章#include<stdio.h>structstudent_type{intnum;charname[10];intage;charsex;}st[10];main(){inti;FILE*fp;

if((fp=fopen("studd.dat","rb"))==NULL){printf("can'topenfile\n");exit(0);}

for(i=0;i<10;i+=2){fseek(fp,i*sizeof(structstudent_type),0);

fread(&stud[i],sizeof(structstudent_type),1,fp);

printf("%s%d%d%c\n",st[i].name,st[i].num,st[i].age,st[i].sex);}

fclose(fp);}[例]磁盘文件stud.dat中存有10个学生数据,要求将第2,4,6,8,10个学生数据显示在屏幕上。2/4/202319《C语言程序设计》-第十一章ftell()函数函数首部:longftell(FILE*fp);功能:得到文件中的当前位置,用相对于文件开头的位移量来表示。返值:返回fp所指向的文件中的读写位置(字节数);出错,返-1L。#include"stdio.h"main(){int

i,len;

FILE*fp;

if((fp=fopen("studd.dat","a"))==NULL){printf("can'topenfile\n");exit(0);}

for(i=0;i<10;i++){ch=getchar();fputc(ch,fp1);}

len=ftell(fp1);

printf("thefilelengthis%d",len);fclose(fp1);}2/4/202320《C语言程序设计》-第十一章小结1.C文件的概念

(1)C语言中文件不是由记录组成,而是被看做一个字符(字节)的序列,称为流式文件。(2)C文件根据数据的组织形式可分为ASCII(文本)文件和二进制文件。(3)C语言对文件的处理方法为缓冲文件系统和非缓冲文件系统。ANSIC标准采用缓冲文件系统。(4)在缓冲文件系统中是靠文件指针与相应文件建

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论