- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工程训练中心 徐国海
2、文件的关闭函数——fclose( ) 文件使用完后应该关闭,防止数据丢失。关闭就是是文件指针变量不 再 指向该文件。可用fclose 函数关闭文件。
文件关闭的形式为:
fclose(文件指针); 如: fclose(fp);
2013年8月20日3时41分
工程训练中心
徐国海
二、文件的读写
第十一章 文件
内蒙古科技大学 工程训练中心
C文件概述
文件是程序设计中的一个重要概念,“文件”是指存储在外部介质上 的数据集合。
C语言把文件看作是一个字符的序列,即由一个一个字符的数据顺序 组成。根据数据的组织形式,可分为文本文件和二进制文件。 文本文件又称为ASCII文件,每一个字节中存放一个ASCII代码, 代 表一个字符。 例如,一个整数123, 若用ASCII文件存放,占3个字节的 存储单元,1、 2、 3各用一个字节存储。而1、2、3的ASCII码分别为49 、50、51,故123用ASCII文件存放时,存放形式为 001100010011001000110011。
“rb” (只读)
“wb” (只写) “ab” (追加) “rb+” (读写) “wb+” (读写) “ab+” (读写)
2013年8月20日3时41分
为输入打开一个二进制文件
为输出打开一个二进制文件 向二进制文件尾部增加数据 为读/写打开一个二进制文件 为读/写建立一个新的二进制文件 为读/写打开一个二进制文件
2013年8月20日3时41分
工程训练中心
徐国海
例5:
从文件中读出一个字符串,并在屏幕上显示出来。 #include <stdio.h> void main() {
FILE *fp;
char string[50]; fp=fopen("file2.c","r"); fgets(string,10,fp);
工程训练中心 徐国海
2013年8月20日3时41分
文件使用方式
文件使用方式 “r”(只读) “w”(只写) “a”(追加) “r+”(读写) “w+”(读写) “a+”(读写) 含 义 为输入打开一个文本文件 为输出打开一个文本文件 向文本文件尾部增加数据 为读/写打开一个文本文件 为读/写建立一个新的文本文件 为读/写打开一个文本文件
2013年8月20日3时41分
工程训练中心
徐国海
其它读写函数
putw函数和getw函数 用来对磁盘文件读写一个字(整数)。 例:putw(10,fp); k=getw(fp);
2013年8月20日3时41分
工程训练中心
徐国海
三、文件的定位
文件中有一个位置指针,指向当前读写的位置,如果顺序读写一 个文件,每次读写一个字符,则读写完一个字符后,该位置指针自动移动 指向下一个字符位置。 ⒈ rewind 函数 该函数的功能是:把文件定位指针重新返回到文件开头。此函数没有 返回值。 ⒉ ftell函数 该函数的功能是:返回文件定位指针的当前位置,即文件头的位移量 (长整型),文件头的位置定为0。函数的参数是文件的指针。如果ftell函 数返回值为-1L,表示出错。 ⒊ fseek函数 用fseek函数可以实现改变文件的位置指针。
}
2013年8月20日3时41分 工程训练中心 徐国海
例8:
同时打开两个数据文件分别进行输入和输出。 #include <stdio.h> void main() { FILE *fp1,*fp2; int a,b,c; fp1=fopen("file3.c","r"); fp2=fopen("file4.c","w"); fscanf(fp1,"%d,%d",&a,&b); c=a+b; fprintf(fp2,"%d+%d=%d\n",a,b,c); fclose(fp1); fclose(fp2); }
fprintf函数和fscanf函数的一般调用方式为: fprintf(文件指针,格式字符串,输出表列); fscanf(文件指针,格式字符串,输入表列); 如: fprintf(fp,”%d,%f”,i,t); fscanf(fp,”%d,%f”,&i,&t);
2013年8月20日3时41分
工程训练中心
例3:
从键盘输入字符,逐个输出到磁盘,直到输入一个“#”为止。
#include <stdio.h> void main() { FILE *fp; char ch,filename[10]; scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("cannot open file\n"); exit(0); }
例2:
将通过键盘输入的一个字符写入文件file1中。 #include <stdio.h> void main() {
FILE *fp;
char a; a=getchar();
fp=fopen("file1.c","w");
fputc(a,fp); fclose(fp); }
2013年8月20日3时41分 工程训练中心 徐国海
fprintf(fp,"Good!\n");
fclose(fp); }
2013年8月20日3时41分
工程训练中心
徐国海
例7:
用fscanf( )函数从数据文件读数据,并显示在屏幕上。
#include <stdio.h>
void main() { FILE *fp; int a,b; fp=fopen("file3.c","r"); fscanf(fp,"%d,%d",&a,&b); printf("a=%d,b=%d\n",a,b); fclose(fp);
2013年8月20日3时41分
工程训练中心
徐国海
例如: int a[100];
fread(a,2,100,fp);
/*从fp读取100个大小为2字节的数据块(整数)到数组a中*/
再如: int a[100]; …… fwrite(a, 2, 100, fp);
/*将整个数组a写入文件fp中*/
徐国海
㈣ fread函数和fwrite函数
用fputc函数和fgetc只能对一个字符进行读写,如果要读写 一个数据块应该使用fread函数和fwrite函数。
fread函数和fwrite函数的一般调用方式为: fread(buffer,size,count ,fp); fwrite(buffer,size,count,fp); buffer——(是一个指针)读入或输出数据的地址 size——要读写的字节数 count——要读写多少个size字节的数据项 fp——文件型指针
徐国海
例6:
用fprintf()函数向一个已经存在的文件中添加数据 。
#include <stdio.h>
void main() { FILE *fp;
if((fp=fopen("file5.c","a"))==NULL)
{ printf("Can not open this file!\n"); exit(0); }
ch=getchar(); while(ch!='#') { fputc(ch,fp); putchar(ch); ch=getchar(); } fclose(fp); }
2013年8月20日3时41分 工程训练中心 徐国海
㈡ fgets函数和fputs函数 1、fgets函数的调用格式为: fgets(str, n, fp);
2013年8月20日3时41分 工程训练中心 徐国海
例4:
将从键盘输入的字符串写入文件file2中。 #include <stdio.h> void main() {
FILE *fp;
char string[50]; gets(string); fp=fopen("file2.c","w"); fputs(string,fp); fclose(fp); }
二进制文件是直接用数据的二进制形式存放。例如,对整数123,二 进制为0000000001111011,用二进制文件存放,需 2 个字节,存放形式 为0000000001111011。
2013年8月20日3时41分 工程训练中心 徐国海
文件类型
文件类型是一特殊的结构体类型,一般命名为FILE。 用户可以直接使用 FILE来定义文件类型变量,存放要处理的文件的基本信息。
其中,fp为文件指针,str为指定的字符串数组,n为包括“\0” 字符在内的字符个数。 fgets函数的作用是:从fp所指定文件中读取n-1个字符,把它 们放到字符数组str中。
2、fputs函数的调用格式为:
fputs(str, fp); 其中,fp为文件指针,str为一字符串。
fputs函数的作用是:把指定的字符串放到指定的文件中。
下面是TURBO C中对FILE的定义: typedef struct { short level; /*缓冲区“满”或“空”的程 度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer; /*数据缓冲区的位置*/ unsigned char *curp; /*指针,当前的指向*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/ } FILE; 工程训练中心 徐国海