C-10
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内存
程 序 数 据 区 output input 文 件 缓 冲 区 output input
os
特点:减少读写次数,提高速度和数据管理质量
5
§9.1文件的概念
③ 非缓冲文件系统
非缓冲文件系统:又称为低级文件系统,它所提供的文件输入、 输出函数更接近于操作系统,在输入、输出数据时,它并不自 动开辟一个内存缓冲区,而是由用户根据所处理的数据的大小 在程序中设置数据缓冲区。
/***定义两个文件 指针变量***/ #include<stdio.h> void main() { FILE *fp1,*fp2; /* …… */ }
3.定义文件类型指针变量
用FILE定义指针变量后即指向开辟的文件信息区 操作文件前, 应先定义FILE 指针变量 使用几个文件就定义几个FILE指针
流式文件:C把文件看作一个字符(字节)序列
一.流式文件 1.文件分类
设备文件——非存储介质(键盘、CRT、打印机等) 流式文件——数据文件 (文本或字符文件和二进制文件)
2
§9.1文件的概念
2.文本文件(字符文件)
又称ASCII文件,常用于预处理输入/输出数据(显示/输入)
例:用ASCII码表示实数 4567.23 — 字符表示方式: ‘4‟ „5‟ „6‟ „7‟ „.‟ „2‟ „3‟ 共七个字节 特点:开销大,速度慢,输入/输出可直接显示
标准C采用缓冲文件系统来处理文本文件和二进制文件,在缓冲
文件系统中,关键的概念是‚文件指针‛。
6
§9.2文件指针
1. 缓冲文件系统的另一项工作
文件操作前,为其开辟一个文件信息区,用于存放 有关文件操作的信息,这些信息是保存在一个结构 体类型的变量中的。 文件信息区的起始位置即为文件指针
2. 文件结构体类型描述
21
例9.4 将 数据‚Float data:”和 123.4 按格式化写入text.dat中, 再按格式读出并显示。
程序设计如下:
FILE *fp;
printf(“\nInput file name:"); en(fname,”r”) ==NULL)
{ fprintf(stderr, "Can't open the file.\n"); exit(0); }
20
§9.4文件的读写
三.文件的格式化读写 1.格式化写/读(文本)文件函数:fprintf(), fscanf() 2.调用格式 #include<stdio.h> fprintf( fp,"格式控制字符串",参数表); fscanf( fp,"格式控制字符串",参数地址表); 例:fprintf(fp, ”%d %f %s\n”, 123, 56.78, ”hello” ); fscanf(fp, ”%d %f %s\n”,&a, &f, str); 【说明】fprintf()写操作遇到’\n‟时,自动进行下列转换: ‘\n‟‟\n‟‟\r‟
2.fgets()函数
18
§9.4文件的读写
2.fgets()函数 功能:从文件中读取一个字符串 string为指向字符数组的指针 原型 #include “stdio.h”
char * fgets(char *string, int n,FILE *fp); ① 从fp打开的文件中读入n-1个字符存入string中,
14
§9.4文件的读写
2.文件结束函数
专用于文件读写结束的判断
int feof(FILE *fp) ;
返回值: 1—读结束(文件尾) ; 0—未结束
例如,改用feof()查询,显示一个文本文件的内容
while(!feof(fp)) putchar(fgetc(fp));
3. fputc()函数
c. 标准出错输出:stderr 3. 其余的15个文件必须实施打开/关闭的操作
文件操作(标准)函数库的头文件均为"stdio.h"
9
6
§9.3 文件的打开与关闭
一.文件的打开——fopen()
功能:用于打开磁盘文件
1.调用方法 #include <stdio.h> FILE *fp; fp=fopen("文件名", "文件操作方式"); ① 打开由‚文件名‛指定的文件(可以包含路径或文件 夹); ② “文件操作方式‛:指定打开文件的读写方式; ③ 返回值:打开成功,返回指向‚文件名‛信息区的指针,
功能:把一个字符写到指定的磁盘文件中
原型:
#include <stdio.h> int fputc( int ch, FILE *fp );
成功—所写字符,失败—EOF(-1)
15
向fp所指的文件写一个字符ch 返回值:
例9.1a从键盘输入若干字符,然后 例9.1b将上例9.1a中的文件内容 逐个把他们送到磁盘文件中去,直 读出并显示出来。 到键入'\n'为止。 #include <stdio.h> void main() #include <stdio.h> void main() {char ch,*fn=“d:\\Text.txt"; {char c,*fn=“d:\\Text.txt"; FILE *fp; FILE *fp; if((fp=fopen(fn, "r"))==NULL) fp=fopen(fn, “w”); {printf("\nCan't open %s\n",fn); if(fp==NULL) exit(0); {printf("Can't open %s\n“,fn); } exit(0); while(!feof(fp)) } while((c=getchar())!='\n') putchar(fgetc(fp)); fputc(c,fp); fclose(fp); fclose(fp); } } 16
C语言是通过函数来对文件进行操作的,C语言编译系统提供两种文件处理方式。
① 处理流式文件的两种文件系统 缓冲文件系统——高级I/O系统 非缓冲文件系统——低级I/O系统
4
§9.1文件的概念
② 缓冲文件系统
系统自动地在内存为正在使用的文件开辟一个缓冲区
当向外存储器的文件输出数据时,首先将数据送到内存缓冲区中, 当缓冲区充满之后,再输出到磁盘文件中;当从磁盘文件读数据时, 它首先读入一批数据存入内存缓冲区中,然后再逐个传递到程序数 据区中。
系统使用typedef描述文件类型FILE中的文件信息 FILE的定义存放在"stdio.h"中
7
§9.2文件指针
文件结构体描述
#include "stdio.h" typedef struct { int _fd; /*文件号*/ int _cleft; /*缓冲区剩下的字符*/ int _mode; /*文件操作模式*/ char *_nextc; /*下一个字符位置*/ char *_buff; /*文件缓冲区位置*/ }FILE;
并自动在string中的串尾追加一个'\0'
② 返回值:读成功—string值, 读失败—NULL值 ③ 读操作,遇到下述两种情况之一,则读结束:
a. 遇到第一个'\n',且被读入
b. 遇到文件结束符EOF(即键值^z)
19
例9.3将磁盘中的一个文件的内容全部读出,并显示
#include <stdio.h> #include<string.h> void main() { char fname[20],buf[81]; /*向屏幕输出一个字符串*/ while(fgets(buf, 81, fp)!=NULL) { fputs( buf, stdout); } fclose(fp); }
7
例:FILE *fp; 打开失败,返回NULL指针值。 fp=fopen(“d:\\data\\Text.dat”,“w”); 【说明】 文件夹和文件已经创建或存在
10
§9.3 文件的打开与关闭
2.文件操作方式
指定打开文件类型及读/写类型, 共有十二种(教材P333 表13-1)
方式
r/rb
8
§9.3 文件的打开与关闭
C的文件操作均采用函数调用
文件操作的一般步骤:
允许同时打开20个文件
打开,读/写,关闭
1. 设备文件在程序运行时自动打开,结束时自动关闭 2. 设备文件常用的有三种(共五种), 各文件名(文件指针): a. 标准输入: b. 标准输出: stdin (可重定向) stdout(可重定向)
3.二进制文件
文件中的数据按对应类型的长度以二进制数形式存放 特点:存储量小,速度快
但人机交互时需要进行转换,适于数据的运算过程 及中间结果的存储。 例:十进制整数 257 对应二进制数为: 0000 0001 0000 0001 (1×28+1×20) ——2B
3
§9.1文件的概念
二.文件处理
【说明】写文件时,如果文件不存在,则新建文件 读文件时,如果文件不存在,则打开出错
11
§9.3 文件的打开与关闭
3.文件的打开与查询
目的:
提高程序和文件操作的可靠性
查询:
返回打开文件指针内容, 来判断文件打开是否成功:
① 指针为NULL时, 打开失败, 立刻终止程序运行; ② 指针为非零值时, 打开成功, 进入读写操作。
功能
只读
说
明
为输入打开一个文本/二进制文件
w/wb
a/ab r+/rb+ w+/wb+ a+/ab+
只写
追加 读写 读写 读写
为输出打开或建立一个文本/二进制文件
为输出打开或建立一个文本/二进制文件 为读/写打开一个文本/二进制文件 为读/写建立一个文本/二进制文件 为读/写打开或建立一个文本/二进制文件
第九章
文 件
内容要点:
一.文件的概念 二.文件类型指针 三.文件的打开与关闭 四.读写文件 五.随机读写文件 六.本章小结
1
§9.1文件的概念
文件:指存储在外部介质上数据的集合,操作系统对外存储器上的数据 是以文件的形式来管理的,不同的文件是以文件名来区分的。 外部设备文件:C语言将I/O设备采用文件名的编址方式,在程序中按 文件处理. 也就是说,从操作系统的角度,每一个与主机相联的输入 输出设备都看作是一个文件。
宏名由宏体派生
17
§9.4文件的读写
二.读/写一个字符串
1.fputs()函数
功能:把一个字符串写到指定的文件中 原型 #include “stdio.h" int fputs(char *string, FILE *fp);
① 参数说明:将字符串string写到fp打开的文 件中;写字符串时,‘\0‟不写到文件中。 ② 返回值:0 —写成功,EOF—写失败。
功能:从指定的磁盘文件中读取一个字符 原型:
例如,显示一个文本文件的内容 while((ch=fgetc(fp))!=EOF) putchar(ch);
#include <stdio.h> int fgetc ( FILE *fp );
从fp所指文件中读入一个字符并返回 返回值:调用成功—读入的字符,失败或读结束—EOF
§9.4文件的读写
文件读/写函数与终端读/写函数有何区别? 在stdio.h中,有如下宏定义: #define putc(ch,fp) fputc(ch,fp) #define getc(fp) fgetc(fp)
#define putchar(c) fputc(c,stdout) #define getchar() fgetc(stdin)
查询代码:
fp=fopen("D:\\Text.dat","w“); if( fp==NULL ) { printf("\nCan't open %s !\n","Text.dat"); exit(0); //关闭所有文件,终止正调用的过程 }
12
§9.3 文件的打开与关闭
二.文件的关闭——fclose() 作用:使指向文件的指针与文件脱离 目的:防止再误用,除非再次打开该文件 调用格式
#include <stdio.h>
fclose(文件指针); ① 原型:int fclose( FILE *fp ); ② "文件指针"——指向用fopen()打开的文件 ③ 返回值 关闭成功——0 关闭失败——非0
13
§9.4文件的读写
常用的读写函数有四类 字符I/O 字符串I/O 按格式I/O 数据块I/O 一.读/写一个字符 1. fgetc()函数