文件

资源下载
  1. 二一教育资源

文件

资源简介

(共33张PPT)
本章重点
14.1 文件的基本概念
14.2 打开与关闭文件
14.3 文件的定位
14.4 对文件的操作
第14章 文件
本章重点
14.1 文件的基本概念
14.2 打开与关闭文件
14.3 文件的定位
14.4 对文件的操作
第14章 文件
14.1 C语言文件的概念
   文件是一种保存数据的基本数据结构,在逻辑上可认为文件是记录在外部介质上的数据的集合。
   对文件输入输出方式也称“存取方式”。C语言中,有两种对文件的存取方式:顺序存取和直接存取。
   顺序存取文件的特点是:每当“打开”这类文件进行读或写操作时,总是从文件的开头开始,从头到尾顺序地读写;
   直接存取文件又称随即存取文件,其特点是:可以通过调用C语言的库函数去指定开始读写的字节号,然后直接对此位置上的数据进行读写操作。
本章重点
14.1 文件的基本概念
14.2 打开与关闭文件
14.3 文件的定位
14.4 对文件的操作
第14章 文件
14.2.1 文件指针
   文件指针,实际上是指向一个结构体类型的指针变量,这个结构体中包含有:缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是“读”还是“写”、是否出错、是否已经遇到文件结束标志等信息。所有一切都在stdio.h头文件中进行了定义,并称此结构体类型名为FILE,可以用此类型名来定义文件指针。
  定义文件指针的一般形式为:
  FILE *指针变量名
   在标准头文件stdio.h中,同时预定义了三个非常有用的文件类型指针stdin、stdout、stderr。这三个标准文件类型指针通常都连到终端设备。
 stdin 标准输入流指针,通常指键盘。
 stdout 标准输出流指针,通常指显示器屏幕。
 stderr标准出错流指针,通常指显示器屏幕。
为了对文件进行使用操作,需要把FILE指针作为一个参数传递给每个标准I/O函数。
14.2.2 打开文件
1.打开文件(fopen函数)
打开一个文件调用标准I/O库函数fopen, 它使打开文件与一个流相联,返回一个指向该流的文件类型指针,用于后续的文件操作。用法:
FILE *fopen(const char *filename, const char *mode);
(1)如打开成功,则fopen的返回一个文件类型指针,否则返回NULL。
(2)参数filename指定打开的文件名。
(3)参数mode指定文件打开方式,具体说明如下:
①对文本文件的打开方式:
r 以只读方式打开。
w 以写方式打开,如果已存在该文件名的文件,文件被重写。
a 附加方式。打开用于在文件末尾写,当文件不存在时,创建新文件用于写。
r+ 打开一个已存在文件用于更新。
w+ 创建一个新文件用于更新,如果已存在该文件名的文件,文件被重写。
a+ 打开用于附加,当文件不存在时,创建新文件用于在文件末尾写。
②对二进制文件的打开方式:
rb 以只读方式打开。
wb 以写方式打开,如果已存在该文件名的文件,文件被重写。
ab 附加方式。打开用于在文件末尾写,当文件不存在时,创建新文件用于写。
rb+ 打开一个已存在文件用于更新。
wb+ 创建一个新文件用于更新,如果已存在该文件名的文件,文件被重写。
ab+ 打开用于附加,当文件不存在时,创建新文件用于在文件末尾写。
例如:打开一个文件
#include
main()
{FILE *fp;
if((fp=fopen("jiaotong", "r"))==NULL)
/*打开文件,并检查文件指针*/
{ printf("cann't open the file:jiaotong");
exit(0); }
else
{printf("open the file:jiaotong");
fclose(fp);
}
}
  该程序的作用是打开当前目录下的一个名叫:jiaotong的文件,如过存在该文件并被打开,则在屏幕上输出一行信息:open the file:jiaotong.;否则输出:cann’t open the file:jiaotong.。虽然此处用只读方式(r)去打开文件,但并未做读取其中内容。
14.2.3 关闭文件
  对文件进行读写操作完成之后,应及时关闭该文件。关闭一个文件调用标准I/O库函数fclose, 它清除与文件相关的流缓冲区。此后将不能再通过该指针,对原来与其联系在一起的文件进行操作;除非再次打开原文件,并让该指针重新指向它。函数fclose的用法:
  int fclose(FILE *stream);
  参数stream为文件流指针。如调用成功,则fclose的返回0,否则返回EOF(-1)。
 例如:关闭一个文件
#include
main()
{FILE *fp;
if((fp=fopen("abc", "r"))==NULL)
{exit(0);
}
if(0==fclose(fp)) /*关闭文件,并检查返回值*/
{ printf("close the file:jiaotong");}
else
{ printf("cann't close the file:jiaotong"); }
}
  运行该程该程序前,确认在当前目录下有一个名叫jiaotong的文件,程序先打开该文件,并立即关闭它,如果文件关闭成功,在屏幕上输出一行信息:close the file:jiaotong.;否则输出:cann’t close the file:jiaotong。
本章重点
14.1 文件的基本概念
14.2 打开与关闭文件
14.3 文件的定位
14.4 对文件的操作
第14章 文件
14.5 调用getc(fgetc)和putc(fputc)函数进行输入和输出
1.输入字符函数fgetc
fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:
字符变量=fgetc(文件指针);
例如:
ch=fgetc(fp);
其意义是从打开的文件fp中读取一个字符并送入ch中。
例如:用fgetc从标准输入终端设备读取一个字符。
#include
main()
{
char ch;
printf("Enter a character followed by :");
ch = fgetc(stdin);
printf("The character read is '%c'\n", ch);
}
 程序的运行情况如下:
 Enter a character followed by :b<回车>   (输入字符“a”)
 The character read is 'b' (显示输入字符“a”)
 说明:
  该程序运行时,提示用户输入一个字符,用户从键盘上输入一个字符并回车,函数fgetc将从标准输入设备stdin读取一个字符。
2.输出字符函数fputc
fputc函数的功能是把一个字符写入指定的文件中,函数调用的 形式为:
fputc(字符量,文件指针);
其中,待写入的字符量可以是字符常量或变量,例如:   fputc('a',fp);
其意义是把字符‘a’写入fp所指向的文件中。
例如:用fputc向标准输出终端设备输出一个字符串。
#include
#include
main()
{
int i;
char ch[]="Hi everybody!";
for(i=0; i{
fputc(ch[i], stdout); /*循环输出字符串中的每个字符*/
}}
 说明:
 该程序运行时,向标准终端输出设备stdout(显示屏)输出字符串:“Hi everybody!”。
#include
#include
main()
{int i;
char ch[]=“Hello everybody!";
for(i=0; i{ fputc(ch[i], stdout); /*循环输出字符串中的每个字符*/
}}
 说明:
 该程序运行时,向标准终端输出设备stdout(显示屏)输出字符串:“Hello everybody!”。
14.6 判文件结束函数EOF
读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件的结尾。此时如果读数据,将会出现错误。为了保证读写数据的正确性,需要进行文件尾测试,文件尾测试使用函数feof(),其格式如下:
格式:int feof(FILE *fp)
功能:测试fp指向的文件是否到达文件尾。若到达文件尾,返回值为非0,否则返回值为0。
14.7 fscanf函数和fprintf函数
1.格式读函数fscanf()
 格式:int fscanf (FILE *fp,const char *format [, address, …])
 功能:根据format中的格式从fp指向的文件中读取数据存入到相应的address指向的变量中。2.格式写函数fprintf()
 格式:int fprintf (FILE *fp,const char *frmat [, argument, …])
 功能:根据格式字符串frmat把argument列表中的表达式值写到fp所指向的文件中。
14.8 fgets函数和fputs函数
1.读字符串函数fgets
  函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名,n,文件指针);
  其中的n是一个正整数。表示从文件中读出的字符串不超过 n 1个字符。在读入的最后一个字符后加上串结束标志‘\0’。
  例如:
fgets(str,n,fp);
  其意义是从fp所指的文件中读出n 1个字符送入字符数组str中。
2.写字符串函数fputs
  fputs函数的功能是向指定的文件写入一个字符串,其调用形式为:
fputs(字符串,文件指针);
  其中字符串可以是字符串常量,也可以是字符数组名或指针变量,例如:
fputs("abcd",fp);
  其意义是把字符串“abcd”写入fp所指的文件之中。
14.9 fread函数和fwrite函数
  直接I/O又叫二进制I/O,用于整块数据的读写。可用来读写一组数据,如一个数组元素,一个结构变量的值等。
1.fread函数
 fread函数是从输入流中读取一个数据块。
 调用形式:
  int fread (void* ptr, int size, int n, FILE  *stream);
2.fwrite函数
fwrite函数用来输出一个数据块到指定流中。
 用法:
 int fwrite(const void* ptr, int size, int n, FILE *stream);
  fwrite将n项长度为size字节数据复制到流中,终结空字符不拷贝。如果调用成功,则fputs返回0;出错时,则返回EOF。参数stream为文件流指针。
14.10 文件定位函数
   实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。
   移动文件内部位置指针的函数主要有两个,即 rewind 函数和fseek函数。另外函数ftell用来得到文件指针的当前位置,用相对于文件头的字节位移量表示。
14.10.1 freek函数
格式:int fseek (FILE *fp, long offset, int from)
功能:移动文件位置指针到指定位置。
说明:
(1)fseek()把文件位置指针移动到与from所指定的文件位置距离offset个字节处,如果指针移动成功,则返回0,出错时返回非0。
(2)参数offset为字节偏移量,为长整型数据,正数代表前进,负数代表后退。
(3)参数form代表移动的开始位置。
14.10.2 ftell函数
 格式:long ftell (FILE *fp)。
 功能:得到fp指向的文件的文件位置指针位置。
 说明:ftell()在调用成功后返回当前指针位置,出错时返回 1L。
  当打开一个文件时,通常并不知道该文件的长度,通过以下函数调用可以求出文件的字节数:
fseek(fp, 0L, SEEK_END); /*把位置指针移到文件末尾*/
  t=ftell(fp); 
  若二进制文件中存放的是struct st结构体类型数据,则通过以下语句可以求出该文件中以该结构体为单位的数据块的个数。
  fseek(fp, 0L, SEEK_END);
  t=ftell(fp);
  n=t/sizeof(struct st);
14.10.3 rewind函数
 格式:void rewind (FILE *fp)
 功能:将文件位置指针定位于文件的开始头。
 说明:该函数的作用是把文件位置指针返回到文件开始处,清除文件结束标志和出错标志,无返回值。

展开更多......

收起↑

资源预览