版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第12章章 文件操作文件操作程序设计语言程序设计语言2本章主要内容本章主要内容3在在C语言中也被称作为流语言中也被称作为流概述概述4 按文件的逻辑结构:按文件的逻辑结构: 记录文件:由记录(定长或不定长)组成记录文件:由记录(定长或不定长)组成 流式文件流式文件:由字符(字节)顺序组成:由字符(字节)顺序组成 按存储介质:按存储介质: 磁盘文件磁盘文件:存储在磁盘上的文件:存储在磁盘上的文件 设备文件:键盘、显示器、打印机等设备文件:键盘、显示器、打印机等 按数据的组织形式:按数据的组织形式: 文本文件文本文件: ASCII文件,每个字节存放一个文件,每个字节存放一个ASCII码码 二进制文
2、件:数据按其在内存中的存储形式存放二进制文件:数据按其在内存中的存储形式存放概述概述5【例例】文本文件:文本文件:ASCII码码二进制文件:二进制文件:补码补码占用占用4个字节个字节0011000100111001001101000011100119490000011110011101概述概述6打开文件打开文件:建立建立用户程序与文件的用户程序与文件的联系联系,为文件,为文件分配分配一个文件缓冲区。一个文件缓冲区。读写文件读写文件:是指对文件的是指对文件的读读、写写、追加追加和和定位定位操作操作。关闭文件关闭文件:切断切断文件与程序的文件与程序的联系联系,释放释放文件缓冲区。文件缓冲区。概述概
3、述7对文件进行读写时需要知道:对文件进行读写时需要知道:文件名、文件状态文件名、文件状态、当前位置当前位置、缓冲区缓冲区的有关信息等的有关信息等1.文件类型文件类型(FILE) 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。“FILE”。typedef struct /结构体成员项,用来存放文件的结构体成员项,用来存放文件的 状态信状态信息息 FILE;文件类型指针与文件打开、关闭文件类型指针与文件打开、关闭8 *指针变量名指针变量名;说明:说明:l 定义文件指针变量时,必须使用定义文件指针变量时,必须使用“F
4、ILE”类型,而类型,而且必须是且必须是大写大写。l 例如定义两个文件指针变量:例如定义两个文件指针变量: FILE *fp1, *fp2;程序中使用的每一个数据文件都必须定义文件指针程序中使用的每一个数据文件都必须定义文件指针!只能通过文件指针访问数据文件。只能通过文件指针访问数据文件。文件类型指针与文件打开、关闭文件类型指针与文件打开、关闭9文件的打开文件的打开 fopen文件的关闭文件的关闭 fclose字符的输入字符的输入/输出:输出: fgetc fputc字符串的输入字符串的输入/输出输出: fgets fputs格式化输入格式化输入/输出:输出: fscanf fprintf数据
5、块的输入数据块的输入/输出输出: fread fwrite rewind fseek与文件有关的函数与文件有关的函数文件类型指针与文件打开、关闭文件类型指针与文件打开、关闭10常用的调用形式:FILE *fp; fp = (文件名, ); 文件名:需要打开的文件名称(字符串) 。 :是具有特定含义的符号。功能: 按指定的打开指定的文件。返回存放文件信息的结构体变量的首地址。若失败则返回空指针(NULL)。文件类型指针与文件打开、关闭文件类型指针与文件打开、关闭11“r+/rb+” (读写读写)“a/ab” (追加追加)“w/wb” (只写只写)“r/rb” (只读只读)“w+/wb+” (读写
6、读写)“a+/ab+” (读写读写)为为输入输入打开一个文本打开一个文本/二进制文件二进制文件为为输出输出打开或建立一个文本打开或建立一个文本/二进制文件二进制文件为读为读/写打开一个文本写打开一个文本/二进制文件二进制文件为读为读/写建立一个文本写建立一个文本/二进制文件二进制文件为读为读/写打开或建立一个文本写打开或建立一个文本/二进制文件二进制文件向文本向文本/二进制文件尾二进制文件尾追加追加数据数据文件使用方式文件使用方式含义含义 在在FILE类型的结构体中,有一个成员用来表示文件的当前读写类型的结构体中,有一个成员用来表示文件的当前读写位置(位置(),一般打开文件时,读写指针指向第一
7、个数据前),一般打开文件时,读写指针指向第一个数据前面;当用面;当用“a”方式打开文件时,读写指针指向最后数据的后面。方式打开文件时,读写指针指向最后数据的后面。文件类型指针与文件打开、关闭文件类型指针与文件打开、关闭12例例 FILE *fp; fp= fopen (“d:ctest.txt”,”r”); 例例 FILE *fp; char *filename=“d:ctest.txt”; fp= fopen(filename,”r”); 为读而打开文件为读而打开文件“d:ctest.txt”(已存在)已存在)上面三种写法等效上面三种写法等效例例 文件打开与测试文件打开与测试 :if (fp
8、=fopen(“file”, “ r”)=NULL) printf(“cannot open this filen”); exit(0); 当前目录下的文件当前目录下的文件注意文件存放的路径注意文件存放的路径!功能是关闭所有文件,终止程序运行。功能是关闭所有文件,终止程序运行。exit(0)为正常终止程序为正常终止程序FILE *fp;char filename80;scanf(“%s”,filename);fp= fopen(filename,”r”);文件类型指针与文件打开、关闭文件类型指针与文件打开、关闭13例:例:FILE *fp; fp=fopen(“output.dat”,“r+”
9、); /* 进行读写操作进行读写操作 */ fclose(fp);fopen函数和函数和fclose函数总是成对出现的。函数总是成对出现的。无无fclose函数时会导致部分数据丢失!函数时会导致部分数据丢失!文件类型指针与文件打开、关闭文件类型指针与文件打开、关闭14文本文件的操作文本文件的操作15文本文件的输入输出函文本文件的输入输出函数数函数描述fgetc()从文件中获得一个字符fgets()从文件中获得一个字符串fscanf()和scanf()一样,但用于文件fputc()向文件写入一个字符fputs()向文件写入一个字符串fprintf()和printf()一样,但用于文件文本文件的操
10、作文本文件的操作16 这两个函数是这两个函数是以字符为单位以字符为单位进行文件读写的函数。进行文件读写的函数。1. fputc1. fputc函数函数fputcfputc( (字符常量或变量字符常量或变量, ,文件指针文件指针); ); 功能:功能:把指定字符存入文件指针所指的文件中。把指定字符存入文件指针所指的文件中。 如果输出失败,则返回一个如果输出失败,则返回一个EOF(-1)。)。例如例如: fputc(ch,fp); 含义含义:将将ch的值输出到的值输出到fp所指向的文件中去。所指向的文件中去。与与putchar()/getchar()对应对应文本文件的操作文本文件的操作17 字符变
11、量字符变量= =fgetcfgetc( (文件指针文件指针); ); 功能:功能:从文件指针所指文件中读一个字符赋给指定的从文件指针所指文件中读一个字符赋给指定的字符变量。当遇文件结束符,返回一个文件结束标志字符变量。当遇文件结束符,返回一个文件结束标志(-1)。)。例如:例如:ch=fgetc(fp); 含义:从含义:从fp所指向的文件中读入一个字符赋给字符所指向的文件中读入一个字符赋给字符变量变量ch。文本文件的操作文本文件的操作18【例例1】从键盘输入字符逐个存到磁盘文件中,直到输入从键盘输入字符逐个存到磁盘文件中,直到输入#为止。为止。/chap11ex1.c#include #inc
12、lude stdlib.hvoid main() FILE *fp; char ch,*filename=“d:filea.txt”; if(fp=fopen(filename,w)=NULL) printf(cannot open filen);exit(0); printf(Please input string, with #:); while(ch=getchar()!=#) fputc(ch,fp); putchar(ch); fclose(fp);文本文件的操作示例文本文件的操作示例19【例例2】读文本文件内容,并显示。读文本文件内容,并显示。/chap11ex2.c#includ
13、e #include stdlib.hvoid main() FILE *fp; char ch,*filename= “d:filea.txt; if(fp=fopen(filename, r)=NULL) printf(cannot open filen); exit(0); while(ch=fgetc(fp)!=) putchar(ch); fclose(fp);判断文本文件是否结束判断文本文件是否结束文本文件的操作示例文本文件的操作示例20#include #include stdlib.hvoid main() FILE *in, *out; /* 文件指针文件指针 */ char
14、 ch,infile10=“a.txt”,outfile10=“b.txt”; /*存放文件名存放文件名*/ if (in = fopen(infile, r)= NULL) printf(Cannot open infile.n); exit(0); if (out = fopen(outfile, w)= NULL) printf(Cannot open outfile.n); exit(0); while ( ch=fgetc(in);fputc(ch, out); fclose(in); fclose(out);文本文件的操作示例文本文件的操作示例【例例3】文本拷贝。文本拷贝。chap
15、11ex3.cchap11ex3.c21 这两个函数是这两个函数是以字符串为单位以字符串为单位进行文件读写的函数。进行文件读写的函数。 fputsfputs( (字符串字符串, ,文件指针文件指针);); 1. fputs1. fputs函数函数功能:功能:向指定文件输出一个字符串。向指定文件输出一个字符串。例如:例如:fputs(str,fp); (其中其中str是字符数组名是字符数组名)含义:含义:向向fp 所指向的文件中输出所指向的文件中输出str中的字符串中的字符串 (不包含结束符)(不包含结束符)与与puts()/gets()对应对应文本文件的操作文本文件的操作222. fgets2
16、. fgets函数函数fgetsfgets( (字符数组字符数组, ,字符串长度字符串长度, ,文件指针文件指针); ); 功能:功能:从指定文件中读入一个字符串。从指定文件中读入一个字符串。 例如:例如:fgets(str,n,fp); (其中其中str是字符数组名是字符数组名)含义:含义:从从fp指向的文件读取长度为指向的文件读取长度为n-1的字符串,的字符串, 最后加一个最后加一个0存入字符数组存入字符数组str中。中。 文本文件的操作文本文件的操作23/chap11ex4.c#include#includestdlib.hvoid main() FILE *fp; char strin
17、g81; if(fp=fopen(file.txt,w)=NULL) printf(cannt open file);exit(0); while(strlen(gets(string)0) fputs(string,fp); fputs(“n”,fp); 【例例4】从键盘读入字符串存入文件,再从文件读回显示从键盘读入字符串存入文件,再从文件读回显示文本文件的操作示例文本文件的操作示例24fclose(fp);if(fp=fopen(file.txt,r)=NULL) printf(cannt open file); exit(0); while( fgets(string,80,fp)!=N
18、ULL) / !=0 puts(string);fclose(fp);rewind(fp); /读写指针回绕读写指针回绕文本文件的操作示例文本文件的操作示例25 这两个函数是进行这两个函数是进行格式读写格式读写文件的函数文件的函数 。 fprintffprintf( (,格式字符串,输出表列),格式字符串,输出表列); ; fscanffscanf( (,格式字符串,输入表列,格式字符串,输入表列); ); 例如:例如:fprintf(fp,“%d,%6.2f”,i,x);功能:功能:按指定格式将数据写到指定文件中。按指定格式将数据写到指定文件中。 或从指定文件按格式输入数据。或从指定文件按格
19、式输入数据。 fscanf(fp,“%d,%f”,&i,&x);文本文件的操作文本文件的操作26文本文件编程练习文本文件编程练习假定有一个用假定有一个用c语言编写的程序语言编写的程序chap11ex3.c,利用文件,利用文件进行操作,将该程序复制到进行操作,将该程序复制到chap11ex3-1.c中去。中去。有一个班,有一个班,3 3个学生,每个学生有个学生,每个学生有4 4门课成绩。求全门课成绩。求全班学生的平均成绩及每个学生的平均成绩。班学生的平均成绩及每个学生的平均成绩。 要求:学生成绩从文本文件中读入。要求:学生成绩从文本文件中读入。27【例例5】使用使用fcanf和和
20、fprintf函数完成函数完成: 从键盘输入从键盘输入3个学生的个学生的姓名与成绩,将其保存在磁盘上。然后读出来显示。姓名与成绩,将其保存在磁盘上。然后读出来显示。 /chap11ex5.c#include #define MAX_NAMELENGTH 10#define MAX_NUMBER 3void main() FILE *fp;char tempNameMAX_NAMELENGTH;double tempGrade;int i;fp=fopen(D:CSOURCEtemp12-5.txt, w);if (fp=NULL) printf(Create File error!n);ret
21、urn;else文本文件的操作示例文本文件的操作示例28 for (i=0; iMAX_NUMBER; i+) printf(Name and Grade:); scanf(%s%lf,tempName, &tempGrade); fprintf(fp,%s %lfn, tempName, tempGrade); fclose(fp);fp=fopen(D:CSOURCEtemp12-5.txt, r);if (fp=NULL) printf(Create Read error!n); return;else for (i=0; iMAX_NUMBER; i+) fscanf(fp,
22、%s%lf, tempName, &tempGrade);printf(%s %fn, tempName, tempGrade); fclose(fp); 从指定文件按格式输入数据到变量中从指定文件按格式输入数据到变量中按指定格式将键盘输入数据写到指定文件中按指定格式将键盘输入数据写到指定文件中文本文件的操作示例文本文件的操作示例29文件操作语句文件操作语句:& FILE *fp;& fp=fopen(文件名文件名, 使用方式使用方式);& fputc(ch, fp)/fgetc(fp);& fprintf(fp, “格式控制串格式控制串”, 输出项输出
23、项); fscanf(fp, “格式控制串格式控制串”, 输入项输入项);& fgets(str,n,fp)/fputs(str,fp); & fclose(fp);文本文件的操作总结文本文件的操作总结30二进制文件的操作二进制文件的操作31二进制文件的输入输出函数二进制文件的输入输出函数 函数函数描述描述fgetc()从文件中获得一个字节从文件中获得一个字节fread ()从文件中获得一数据块从文件中获得一数据块fputc()向文件写入一个字节数据向文件写入一个字节数据fwrite()向文件写入一数据块向文件写入一数据块二进制文件的操作二进制文件的操作32文件定位函数文件定位
24、函数函数函数描述描述fseek()将文件位置指针移动到指定的位置。其中的位置说将文件位置指针移动到指定的位置。其中的位置说明符为:明符为:SEEK_SET-从文件头查找;从文件头查找;SEEK_CUR从当前位置指针的当前位置找;从当前位置指针的当前位置找;SEEK_END从文件尾查找从文件尾查找ftell ()返回文件的当前位置指针的字节偏移数返回文件的当前位置指针的字节偏移数rewind()将文件的当前位置指针指向文件头将文件的当前位置指针指向文件头二进制文件的操作二进制文件的操作33 一般调用形式:一般调用形式: fwritefwrite( ( ,size,size,n n, ,fpfp)
25、 ); :某类型指针;:某类型指针;sizesize:某类型数据存储空间的字节数(数据项大小);:某类型数据存储空间的字节数(数据项大小);n n:此次写入文件的数据项数;:此次写入文件的数据项数;fpfp:文件指针变量。:文件指针变量。二进制文件的操作二进制文件的操作34 一般调用形式:一般调用形式: freadfread( ( ,size,size,n n, ,fpfp) );:某类型指针;:某类型指针;sizesize:某类型数据存储空间的字节数(数据项大小);:某类型数据存储空间的字节数(数据项大小);n n:此次从文件中读取的数据项数;:此次从文件中读取的数据项数;fpfp:文件指针
26、变量。:文件指针变量。功能:功能:从从fpfp所指向的文件中,读取所指向的文件中,读取n n个数据项,存放到个数据项,存放到 所指向所指向 的存储区域。的存储区域。 若输入操作成功,返回实际读出的数据项个数。若输入操作成功,返回实际读出的数据项个数。 若文件结束或调用失败,则返回若文件结束或调用失败,则返回0 0。二进制文件的操作二进制文件的操作35功能:功能:将文件将文件读写指针读写指针从从whencewhence标识的位置移动标识的位置移动offsetoffset个字个字 节节, ,并将文件结束指示器并将文件结束指示器清清0 0。 若移动成功,返回若移动成功,返回0 0; 若移动失败,则返
27、回若移动失败,则返回非非0 0值。值。 常量标识符常量标识符 值值 起始位置起始位置SEEK_SET 0 文件开始位置文件开始位置SEEK_CUR 1 文件读写指针当前位置文件读写指针当前位置SEEK_END 2 文件结束位置文件结束位置 一般调用形式:一般调用形式: fseek(fseek(fpfp, , offsetoffset, , whencewhence) );fpfp:文件指针变量;:文件指针变量;offsetoffset:位移量(字节,长整型);:位移量(字节,长整型);whencewhence:起始位置标志。:起始位置标志。fseek(fp,30,0)从从文件开始位置文件开始位
28、置向文件向文件结束结束方向移动方向移动30个字节个字节fseek(fp,-10,1)从从当前位置当前位置向文件向文件开始开始方向移动方向移动10个字节个字节fseek(fp,-8,2)从从文件结束位置文件结束位置向文件向文件开始开始方向移动方向移动8个字节个字节二进制文件的操作二进制文件的操作是是正正数,文件数,文件读写指针读写指针向文件向文件尾部尾部方方向移动;是向移动;是负负数向文件数向文件头部头部移动移动 36一般调用形式:一般调用形式: ftell( ftell( fpfp ) );fpfp:文件指针变量;:文件指针变量;功能:功能:返回返回fpfp指向的文件中的指向的文件中的读写指针
29、读写指针当前位置,即相对当前位置,即相对 于文件开始处的于文件开始处的位移量位移量,单位是字节。,单位是字节。 若调用成功,则返回文件读写指针当前值(长整型);若调用成功,则返回文件读写指针当前值(长整型); 若调用失败,则返回若调用失败,则返回-1L-1L。 二进制文件的操作二进制文件的操作37 一般调用形式:一般调用形式: rewind( rewind( fpfp ) );fpfp:文件指针变量;:文件指针变量;二进制文件的操作二进制文件的操作38【例例6 6】#includestruct stuchar name10;int num;int age;char addr15;boya2,
30、boyb2, *pSource, *pDest;void main()FILE *fp;int i;pSource=boya;pDest=boyb;if(fp=fopen(“d:filetemp11-6.dat, wb+)=NULL) printf(Cannot create file!); exit(1);二进制文件的操作示例二进制文件的操作示例39 printf(Input The Students Name, Num, Age, Adressn);for(i=0; iname, &pSource-num, &pSource-age, pSource-addr);pSource=boya;fwrite(pSource, sizeof(struct stu), 2, fp);rewind(fp);fread(pDest, sizeof(struct stu), 2, fp);printf(nnametnumbertaget addrn);for(i=0; iname, pDest-num, pDest-age, pDest-ad
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 委托办理供电委托书模板
- 电梯机房管理制
- 租工地做停车场合同(2篇)
- 资产收购合同书范本(2篇)
- 天净沙课件 秋思
- 嫘祖养蚕 课件
- 《蜗牛的花园》少儿美术教育绘画课件创意教程教案
- 西南林业大学《插花艺术》2022-2023学年第一学期期末试卷
- 西京学院《商务谈判》2021-2022学年第一学期期末试卷
- 西京学院《课程与教学论》2022-2023学年第一学期期末试卷
- 毕淑敏中考阅读理解14篇(含答案)
- 生活中的工业设计知到章节答案智慧树2023年南开大学
- 大学生创新创业法律实务知到章节答案智慧树2023年广西师范大学
- 银行尽职调查清单
- 贵州铜仁古城营建及运营总体策划方案
- 颌面部间隙感染病人的护理
- 水下抛石护岸工程施工技术研究
- RFID智能仓库管理系统
- (2023)全国中小学生语文素养大赛知识素养测试题及参考答案
- 外研版八年级下册英语单词表(带音标)
- 重庆市社会保险登记表
评论
0/150
提交评论