版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、文件操作概述所谓文件文件,是指存放在外部存储介质(可以是磁盘、光盘、磁存放在外部存储介质(可以是磁盘、光盘、磁带等等)上数据的集合带等等)上数据的集合。要想读取外部存储介质中的数据,必须先先按照文件名找到找到相应的文件文件,然后然后再从文件中读取数据读取数据。要想将数据存放到外部存储介质中,首先先要在外部介质上建立一个文件,然后然后再向文件写入数据写入数据。C语言将文件看成是一个字节序列。但从对文件中的数据的解释方式来看,C语言区分两种文件类型:文本文件文本文件和二进制文件二进制文件。文本文件中的每一个字节都是字符型数据每一个字节都是字符型数据,整个文件的内容就是多行文本;二进制文件中的数
2、据看成是数值数据数值数据,或复杂数据类型的数据复杂数据类型的数据。一般情况下,后缀是.txt,.c,.cpp,.h,.hpp,.ini等的文件大多是文本文件,后缀是.exe,.com,.dll,.lib,.dat,.doc,.tif等的文件大多是二进制文件。二、文件指针在C语言看来,文件就是字节流,即字节序列。我们把按这这种方式处理的文件称为流文件。C语言本身没提供输入输出的功能,必须调用标准库函数进行文件读写。操作文件的过程中要用到一个重要的数据类型是文件指针。什么是文件指针呢?程序在操作文件过程中,必须保存有关文件的一些信息,比如,文件名、文件的状态、当前读写的位置等等。C语言将这些信息保
3、存在一个结构体中,stdio.h文件中将这个结构体类型定义为FILE:typedef struct int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ int bsize; /* Buffer size */ unsigned char _FAR *buffer; /* Data transfer buffer */
4、unsigned char _FAR *curp; /* Current active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ FILE; /* This is the FILE object */二、文件指针C的标准库函数每操作一个文件,都为这个文件建立一个FILE型变量。有了这个FILE型变量,C库函数就将文件底层操作的细节与程序员隔离开,使文件操作的程序更容易编写。在操作文件过程中,程序员只能获取到FILE型的指针,这个
5、指针所指向的FILE型变量存放着所操作文件的基本信息。这个FILE指针又称文件类型指针文件类型指针。每个文件类型指针唯一唯一代表一个文件。例如,下面定义了一个文件类型指针:FILE *fp;这个fp指针将代表一个文件,对文件的任何操作都离不开这个文件类型的指针。三、文件的打开与关闭打开文件需要调用fopen函数,关闭文件需要调用fclose函数。这两个函数的原型如下:FILE *fopen(char *filename,char *mode);int fclose(FILE *stream);fopen函数带有两个参数:第一个参数filename是要打开的文件名,第二个参数mode也是一个字符
6、串,这个字符串中的字符表示打开文件的方式。mode字符串由两类字符构成:一类字符表示打开文件的类型,t表示文本文件,b表示二进制文件,如果不指定文件类型,默认为文本文件;另一类字符是操作类型,r表示从文件中读取数据,w表示向文件写入数据,a表示在文件尾部追加数据,+表示文件可读可写三、文件的打开与关闭例如,如果要创建一个文本文件,mode字符串应该是:”wt”或”w”,如果要打开一个二进制文件准备读取数据,mode字符串应该是:”rb”或”br”。函数fopen返回打开文件的文件指针,程序在读写和关闭文件时,要用到这个指针。如果打开文件失败,fopen返回NULL。函数fclose的功能是关闭
7、文件,要关闭的文件由参数stream指定,通常这个参数就是fopen函数的返回值。下面的程序打开和关闭了一个名为”exp09_01.c”的文件:FILE *fp;fp=fopen(exp09_01.c,r); /试图打开该文件试图打开该文件if(fp=NULL) printf(exp09_01.c not found); else . /读取和加工数据读取和加工数据 fclose(fp); /关闭该文件关闭该文件 四、文件的读写文件的读写需要调用fscanf, fprintf, fgets, fputs, fgetc, fputc, fread, fwrite等标准库函数。1.fscanf和和
8、fprintf函数函数scanf函数的第一个参数是格式控制字符串,后面的参数是变量的地址。fscanf函数的第一个参数是文件类型的指针,第二个参数是格式控制字符串,在后面的参数才是变量的地址,它的功能是从文件中读取数据。int a;float f;FILE *fp;scanf(%d,%f,&a,&f); /从键盘读取变量从键盘读取变量a和和f的值的值fp=fopen(yang.dat, rb); /以只读方式打开以只读方式打开yang.dat文件文件if(fp!=NULL) fscanf(fp, %d,%f,&a,&f); /从文件中读取变量从文件中读取变量a和
9、和f的值的值 fclose(fp); /关闭该文件关闭该文件 如果遇到文件尾,fscanf函数返回EOF。四、文件的读写printf函数的第一个参数是格式控制字符串,后面的参数是要输出的表达式列表。与它不同,fprintf函数的第一个参数是文件指针,第二个参数是格式控制字符串,在后面的参数是要输出的表达式列表,它的功能是将表达式输出到文件中。int a=100;float f=3.1;FILE *fp;printf (a=%d,f=%f,a,f); /输出输出a和和f的值的值fp=fopen(yang.dat, wb); /创建创建yang.dat文件文件if(fp!=NULL) fprint
10、f (fp, a=%d,f=%f,a,f); /将变量将变量a和和f的值写入到的值写入到文件中文件中 fclose(fp); /关闭该文件关闭该文件 如果输出数据成功,fprintf函数返回写到文件中的数据的字节个数,否则返回EOF。四、文件的读写2.fgetc和和fputc函数函数这两个函数的原型是:int fgetc(FILE *stream);int fputc(int c,FILE *stream);fgetc函数的功能是从stream所代表的文件中读取一个字节,返回值是读取的字节值,如果遇到文件尾或出错,它返回如果遇到文件尾或出错,它返回EOF。fputc函数的功能是将一字符c输出到
11、stream所代表的文件中,返回值是返回值是c的值,如果出错,则返回的值,如果出错,则返回EOF。#include void main() char str10,ch; int k; FILE *fp1,*fp2; fp1=fopen(“yang.txt”,”wt”); /创建文本文件yang.txt if(fp1!=NULL) scanf(“%8s”,str); /或取字符串 for(k=0;kstrlen(str);k+) fputc(strk,fp1); /将字符串的内容写入文件 fclose(fp1); /关闭文件 下面的程序将输入的字符串写入到文件中,然后再将字符下面的程序将输入的字
12、符串写入到文件中,然后再将字符串从文件中读出:串从文件中读出: fp2=fopen(“yang.txt”,”rt”); /以只读方式打开yang.txt文件 k=0; while(1) ch=fgetc(fp2); /从文件中读取一个字符 if(ch=EOF)break; /如果遇到文件尾,则跳出循环 strk+=ch; /否则将读取的字符存放到str中 strk=0; /为字符串增加结尾字符0 printf(“%s”,str); /如果创建yang.txt文件成功下面的程序将输入的字符串写入到文件中,然后再将字符下面的程序将输入的字符串写入到文件中,然后再将字符串从文件中读出:串从文件中读出
13、:四、文件的读写3. fgets和和fputs函数函数fgets和fputs函数的原型是:char *fgets(char *s, int n, FILE *stream);int fputs(char *s, FILE *stream);fgets函数的功能是从stream所代表的文件中读取长度最大为长度最大为n-1的字符串,并将字符串存放到s中。当从文件中读取第当从文件中读取第n-1个字符后或读取个字符后或读取数据过程中遇到换行符数据过程中遇到换行符n后,函数返回后,函数返回。因此,s中存放的字符串的长度不一定正好是n-1。fgets会为这个字符串增加结尾符0。fputs函数的功能是将存放
14、在s中的字符串写到stream所代表的文件中。如果操作成功,fputs函数返回最后写入文件的字符值,如果出错,函数返回最后写入文件的字符值,如果出错,fputs函数返回函数返回EOF。如果操作成功,fgets函数返回字符串的指针;如果遇到文件尾或者出错,fgets返回NULL。fputs函数不会将字符串结尾符0写入文件,也不会自动向文件中写入换行符,如果需要写入一行文本,fputs函数的s字符串必须包含n。 fp2=fopen(yang.txt,rt); /以只读方式打开yang.txt文件 fgets(str,8,fp2); /读取字符串,最大长度是7,将是”1234567” printf(
15、%s,str); fgets(str,8,fp2); /读取字符串,最大长度是7,实际上将是”89n” printf(%s,str); fclose(fp2); /关闭文件下面的程序将向文件下面的程序将向文件yang.txt中写入两行文本,然后分中写入两行文本,然后分两次读出其中的一行两次读出其中的一行#include void main()char str10=123456789;FILE *fp1,*fp2;fp1=fopen(yang.txt,wt); /创建文本文件yang.txtif(fp1!=NULL) fputs(str,fp1); /将字符串”123456789”写入文件 fp
16、uts(nabcd,fp1); /写入第一行文本的换行符和下一行文本 fclose(fp1); /关闭文件/如果创建yang.txt文件成功四、文件的读写4. fread和fwrite函数fread和fwrite函数的原型是:unsigned fread(void *ptr, unsigned size, unsigned n,FILE *stream);unsigned fwrite(void *ptr,unsigned size, unsigned n,FILE*stream);fread函数的功能是从stream所代表的文件中读取n个数据项,每个数据项的大小是size字节,这些数据将被存
17、放到ptr所指向的内存中。fwrite函数的功能是将ptr所指向的内存中存放的n个大小为size个字节的数据项写入stream所代表的文件中,实际要写入数据的字节数是(n*size)。fread和fwrite可以用来读写任意类型的数据,可以是简单类型,也可以是数组或结构体类型。如果操作成功,fread返回读取的数据项的个数(不是字节的个数),如果操作出错,fread可能返回0。如果操作成功,fwrite函数返回实际写入的数据项的个数(不是字节个数)。如果操作不成功,可能返回0。下面的程序先将一个int型数组存放到文件中,然后再读出来:#include void main()int a10=10
18、,20,30,40,50,60,70,80,90,100;int k;FILE *fp1,*fp2;fp1=fopen(yang.dat,wb); /创建二进制文件yang.datif(fp1!=NULL) fwrite(a,sizeof(int),10,fp1); /将数组a的10个整数写入文件 fclose(fp1); /关闭文件 fp2=fopen(yang.dat,rb); /以只读方式打开yang.dat文件 fread(a,sizeof(int),10,fp2);/从文件中读出10个整数值放到a中 fclose(fp2); /关闭文件 for(k=0;k10;k+) printf(
19、%d ,ak); /输出读取的整数 /如果创建yang.dat文件成功五、文件的定位读写在文件读写过程中,操作系统为每个打开的文件设置了一个位置指针,指向当前读写数据的位置。每次读写一个字节后,这个指针向后移动一个字节的位置。文件的位置指针不是一个指针型数据,仅仅是一个无符号长整型数据,用来表示当前读写的位置。文件的位置指针的最小值是0,最大值是文件的长度。文件被打开时,文件的位置指针位于文件头部随着数据的读写,文件的位置指针会向后移动。文件的位置指针也可以通过程序来改变,这需要调用rewind,fseek等函数。如果想知道文件指针的位置,可以调用ftell函数。1.rewind函数函数rew
20、ind函数的原型:void rewind(FILE * stream);rewind函数的功能是将stream所代表文件的位置指针重新置回到文件的开头。五、文件的定位读写2. fseek函数函数fseek函数的原型:int fseek(FILE * stream,long offset, int whence);fseek函数的功能是将stream所表示的文件位置指针移动到特定的位置。这个特定位置由whence和offset决定:即将位置指针移到距离whence的offset字节处。whence可以是下列值之一:offset可以是负值。如果offset是正值,表明新的位置在whence的后面,如果offset是负值,表明新的位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《山西康庄项目提案》课件
- 复习真题卷01 第1-2单元 (解析版)
- 《电子测量技术》课件
- 来凤县旧司乡中心卫生院配套设施建设可研报告
- 《家庭伦理剧》课件
- 2014年高考语文试卷(山东)(空白卷)
- 《红岩》课件(中考名著)
- 美容美发服务销售心得
- 2023年-2024年员工三级安全培训考试题附答案(夺分金卷)
- 2023-2024年项目部治理人员安全培训考试题附下载答案
- 2023年中荆投资控股集团有限公司招聘笔试模拟试题及答案解析
- DPP-4抑制剂的临床应用及优势解析课件
- 《起重吊装方案编制》课件
- 光伏扶贫项目可行性研究报告
- 钣金冲压件质量要求
- 2022年高考全国甲卷语文试题评讲课件55张
- 欠条(标准模版)
- 深圳京基·KKmall市场考察报告(45页
- 国家开放大学电大本科《西方社会学》2023-2024期末试题及答案(试卷代号:1296)
- JBT5323-91立体仓库焊接式钢结构货架 技术条件
- 60m3卧式液化石油气储罐设计
评论
0/150
提交评论