文件程序设计
内容
说明
主要内容
重点
难点
问题提出
1.文件基本概念
2.文件基本操作方式
3.文件基本工作模式
4.文件的打开与关闭
5.文件的读写操作
6.文件的定位
重点把握概念
注意:不同的分类标准有不同的分类形式
1.文件基本工作模式
2.文件的打开与关闭
3.文件的概念及工作思想
文件的工作思想
C语言程序设计对文件的操作是非常重要的操作,也是非常必要的操作,是对数据和程序长期保存和对标准输入和输出设备的补充。
一、文件的概念文件是一组存储在外部介质上数据的集合。而组成文件的这些数据可以是一批二进制数、一组字符或一个程序。包括磁盘文件和设备文件。
1.文件的分类
按照不同的标准可以把文件分为不同的类型。
(1)按文件的结构形式分类
(二进制文件:二进制文件是把内存中的二进制数据按其在内存中的存储形式原样输出到磁盘上存放。
(文本文件:全部由字符组成的具有行列结构的文件,由于文件的每个元素都是用ASCII码来表示的(又称ASCII码文件)。
(2)按照文件的读写方式分类
(顺序文件:它把数据看成作为一连串的字符或字节数据,当从顺序文件中读取数据时,先输入的先输出,按照顺序输入输出。
(随机文件:在该文件中,可以对该文件的某一元素进行读写,不需要从文件开头开始。
(3)按照文件存储的外部设备分类
(设备文件:在C语言中,把外部设备都作为文件对待,称为设备文件。
(磁盘文件:通过磁盘来存储某些数据,这样的文件称为磁盘文件。
(4)按照系统对文件的处理方法分类
(缓冲文件:即系统在内存中开辟一个缓冲区,当对磁盘文件操作时,首先经过缓冲区,才能达到目的。
(非缓冲文件:开辟缓冲区的工作由程序来完成,不是由系统来完成。
2.文件类型指针
在C语言中,无论是一般磁盘文件还是设备文件,都可以通过文件结构体类型的数据集合进行输入输出操作,文件结构体是由系统定义的,取名为FILE,其意义包含在stdio.h文件中。主要信息有:
(文件名
(文件状态
(文件当前的读/写位置
(文件缓冲区的位置
(文件从当前位置开始在缓冲区中的数据个数
对文件的处理步骤一般为:
二、文件的打开与关闭
1.文件的打开
文件打开函数—fopen()

【说明】:
(fp为文件指针,指向文件filename,即可为字符串变量,也可为字符串常量;
(mode为文件打开的方式,为下列之中:
“r” 以只读方式打开一个已有文本文件
“w” 以只写方式建立一个文本文件
“a” 以添加方式打开一个文本文件,在文件末尾添加,若文件不存在,则建立一个新的文件后在添加。
“rb” 以只读方式打开一个二进制文件
“wb” 以只写方式打开一个二进制文件
“ab” 以添加方式打开一个二进制文件
“r+” 以读写方式打开一个已有文本文件
“w+” 以读写方式建立一个新的文本文件
“a+” 以修改方式打开一个文本文件,在文件末尾添加修改,若文件不存在,则建立一个新的文件后在添加。
“rb+” 以读写方式打开一个已有的二进制文件
“wb+” 以读写方式建立一个新的二进制文件
“ab+” 以修改方式打开一个二进制文件
2.文件关闭文件关闭函数—fclose()
fclose ( fp ) ;
【说明】:fp为已定义过的文件指针。
文件指针是操作文件的必不可少的工具
对打开模式要重点掌握
强调为什么要实行关闭操作
思想重要,方法简单
【例】
# include <stdio.h>
main()
{ FILE *fp;
int c;
fp=fopen("p359.c","r");
c=fgetc(fp);
while(c!=EOF)
{
putchar(c);
c=fgetc(fp);
}
}
三、文件的读写操作(复习前4个已学过的函数)
1.字符输入函数——getchar()
【功能】从标准输入设备逐一输入字符,直到遇到(Ctrl—Z或文件结束符)为止,该函数无参数,返回值为整型。
2.字符输出函数——putchar()
【功能】在标准输出设备逐一输出字符,直到遇到(Ctrl—Z或文件结束符)为止,该函数有参数(参数为整型)。
【例】
# include <stdio.h>
main()
{
int c1,c2;
clrscr();
while((c1=getchar())!=EOF)
{
if (c1>='A'&&c1<='Z')
{ c2=c1+32;
putchar(c2);
}
if (c1>='a'&&c1<='z')
{ c2=c1-32;
putchar(c2);
} }
}
3.字符串输入函数——gets(s)
【功能】完成从标准输入设备输入一字符串,以回车作为结束符,该函数的参数为字符型指针,代表一个地址,正常操作的返回值为内存中的首地址,如果出错,返回值NULL。
4.字符串输出函数——puts(s)
【功能】完成将标准输入设备输入的字符串从标准输出设备输出,并将结束符转换成回车,正常操作的返回值为0,如果出错,返回值EOF(-1)。
通过程序理解概念,对程序思想要重点掌握
复习
复习
复习
复习

通过实例掌握
【例】
#include <stdio.h>
main()
{
FILE *fp;
char string[50];
fp=fopen("file2.c","r");
fgets(string,10,fp);
fclose(fp);
puts(string);
}
5.字符输入函数—fgetc()
【功能】该函数将文件中的一个字符读取并将其转换成一个字节的代码值,当读到文件末尾时或读取错误时,函数值返回一个文件结束标志EOF(-1)。
【例】
#include <stdio.h>
main()
{
FILE *fp;
char a;
fp=fopen("file1.c","r");
a=fgetc(fp);
putchar(a);
fclose(fp);
}
6.字符输出函数—fputc()
fputc(c,fp);
【功能】该函数将一个字节的代码值c写入fp指向的文件中,当输出正常时,函数值返回该函数的返回值,如果失败则返回文件结束标志EOF(-1)。
【例】 #include <stdio.h>
main()
{ FILE *fp;
char ch,filename[10];
scanf("%s",filename);
 if((fp=fopen(filename,"w"))==NULL)
{ printf("cannot open file\n");
exit(0); }
ch=getchar();
while(ch!='#')
{ fputc(ch,fp);
putchar(ch);
ch=getchar(); }
fclose(fp); }
7.字符串输入函数——fgets()
【功能】该函数是从fp指定的文件中读取一个字符串,并且该函数只读取n-1个字符,因为还要加上一个‘\0’字符,该函数遇下列之一结束:
(已经读取n-1个字符
(回车符
(文件末尾
8.字符串输出函数——fputs()
fputs(str,fp);
【功能】将函数完成的是将由str指定的字符串写入fp指向的文件中。字符串末尾的‘\0’自动舍去。
9.格式化输入函数——fscanf ()
fscanf(fp,format,&arg1,&arg2,…&argn);
【说明】 (fp为文件指针。
(format为输入格式,即%d,%x,%f,%c,%s等。
( &arg1,&arg2,…&argn为输出项列表,输出为ASCII码值。
10.格式化输出函数——fprintf()
fprintf(fp,format,arg1,arg2,…argn);
【说明】 ( fp为文件类型指针。
( 该函数其他的参数和printf()一样。
11.数据块写函数——fwrite( )
fwrite(buffer,size,count,fp);

【说明】(buffer——(是一个指针)读入或输出数据的地址。
(size——要读写的字节数。
(count——要读写多少个size字节的数据项。
(fp——文件型指针。
12.数据块读函数——fread( )
fread(buffer,size,count,fp);
【说明】(buffer 是内存块的首地址,从文件中读入的数据存入这个内存块中。
(size 表示每个数据块的字节数。
(count 为读出数据块的个数。
(fp 为文件型指针。
四、文件的定位文件中有一个位置指针,指向当前读写的位置,如果顺序读写一个文件,每次读写一个字符,则读写完一个字符后,该位置指针自动移动指向下一个字符位置。
⒈ rewind 函数
该函数的功能是:把文件定位指针重新返回到文件开头。此函数没有返回值。
⒉ ftell函数
该函数的功能是:返回文件定位指针的当前位置,即文件头的位移量(长整型),文件头的位置定为0。函数的参数是文件的指针。如果ftell函数返回值为-1L,表示出错。
⒊ fseek函数
用fseek函数可以实现改变文件的位置指针。
五、小结通过本讲学习,使得学生掌握文件的基本概念及文件操作的思想,对文件分类、工作模式都有了系统的介绍,并且对文件的基本操作也有了系统的阐述,重点介绍了文件的基本操作之文件的打开和文件的关闭、对文件的读写操作。