第8章文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章 文件
8.1 文件的概念
①文件:指存储在外部介质上的数据集合(数据文件) 文件:指存储在外部介质上的数据集合(数据文件) 操作系统以文件为单位对数据进行管理
原来程序 执行 键盘输入数据
程 序
屏幕上显示结果
现在程序 执行
文件读入数据
程 序
结果存入文件
②把数据看着一连串的字符(字节),是字节流,称为流式文件 把数据看着一连串的字符(字节),是字节流, ),是字节流 。 缓冲文件系统(标准I/O)和非缓冲文件系统(系统I/O) I/O)和非缓冲文件系统 ③缓冲文件系统(标准I/O)和非缓冲文件系统(系统I/O) 它们分别对应使用不同的输入输出函数
目录
上一张
下一张
退出 退出
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char ch; if (( fp=fopen(“f:\\C3ex\file1.txt”,”r”))==NULL) { printf(“cannot open this file.\n”); exit(1); } while (( ch=fgetc(fp))!=EOF) /* 将用 将用fgetc()读入的字符逐个显示 */ 读入的字符逐个显示 putchar(ch); fclose(fp); 程序运行显示如下结果: 程序运行显示如下结果: return 0; I love China. }
目录 上一张 下一张
退出 退出
8.2 文件指针
文件分类 ASCII码文件(能直接显示内容、费存储空间) 码文件(能直接显示内容、费存储空间) 二进制文件(不能显示内容、节省存储空间) 二进制文件(不能显示内容、节省存储空间) 文件
ascii码 (文本文件 text stream) a.c 程序文件 码 )
目录 上一张 下一张
退出 退出
从磁盘文件中读一个字符
fgetc()函数 函数 函数fgetc()的作用是从一个文件中读取一个字符。 的作用是从一个文件中读取一个字符。 函数 的作用是从一个文件中读取一个字符 其调用形式为: 其调用形式为: fgetc(文件型指针变量) (文件型指针变量) 例: a=fgetc(fp); fp为一个文件类型指针变量,函数 为一个文件类型指针变量, 为一个文件类型指针变量 函数fgetc(fp) 不仅返回文件当前位置的字符, 不仅返回文件当前位置的字符,并且使文件位置指针 下移一个字符。如果遇到文件结束, 下移一个字符。如果遇到文件结束,则返回值为 中定义为-1 文件结束标志 EOF。EOF在stdio.h中定义为 。 在 中定义为
目录 上一张 下一张
退出 退出
按字符串读写的函数fgets()、fputs() 、 按字符串读写的函数 1. fgets()函数 . 函数 作用:是从一个文件中读取一个字符串。 作用:是从一个文件中读取一个字符串。其调用形 式为: 式为: fgets(字符数组,字符数,文件型指针变量) (字符数组,字符数,文件型指针变量) 例: fgets(str,n,fp); 从fp指向的文件的当前位置开始读取 n-1 个 指向的文件的当前位置开始读取 字符, 字符,并加上字符串结束标志 ’\0’ 一起放入字符 数组 str 中。如果从文件读取字符时遇到换行符或 文件结束标志EOF,读取结束。函数返回值为字符 文件结束标志 ,读取结束。 数组str的首地址。 数组 的首地址。 的首地址
只有通过文件指针变量才能 调用相应的文件
文件指针变量的赋值操作是由 打开文件函数fopen()实现的 打开文件函数fopen()实现的 fopen()
目录 上一张 下一张
退出 退出
8.3 文件的打开与关闭
C文件操作用库函数实现 包含在stdio.h 文件操作用库函数实现,包含在 文件操作用库函数实现 包含在 文件使用方式:打开文件 文件读/写 关闭文 打开文件-->文件读 文件使用方式 打开文件 文件读 写-->关闭文 件 打开文件fopen 打开文件
目录
上一张
下一张
退出 退出
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; int ch; if ((fp=fopen(“f:\\C3ex\\file1.txt”,”w”))==NULL) { printf(“cannot open this file.\n”); exit(1); } while ((ch=getchar())!=’\n’) fputc(ch,fp); 运行情况如下,当键入: 运行情况如下,当键入 fclose(fp); I love China. return 0; 时,这些字符将逐个被输出到 } 磁盘文件 file1.txt 中。
目录 上一张 下一张
退出 退出
(3)如果由于文件不存在等原因造成不能打开文件,则调 如果由于文件不存在等原因造成不能打开文件, fopen()后将返回一个空指针NULL。 后将返回一个空指针NULL 用fopen()后将返回一个空指针NULL。 所以一般在执行打开文件操作时, 所以一般在执行打开文件操作时,需要考虑 文件不存在的情况,并且最好给出提示信息。 文件不存在的情况,并且最好给出提示信息。 例 文件打开与测试 FILE *fp; fp=fopen(“aa.c”,“r”); if(fp==NULL) { printf(“File open error!\n”); exit(1); 一般exit(0)表示程序正常退出, exit(0)表示程序正常退出 一般exit(0)表示程序正常退出, exit(非零值 表示程序出错后退出。 非零值) exit(非零值)表示程序出错后退出。 } 当文件可以打开时,文件指针变量fp指向这个打开的文件, 当文件可以打开时,文件指针变量fp指向这个打开的文件, fp指向这个打开的文件 通过fp可以完成对文件的读取操作;当文件不能打开时, fp可以完成对文件的读取操作 通过fp可以完成对文件的读取操作;当文件不能打开时, 显示错误,并且通过exit()函数关闭所有文件, exit()函数关闭所有文件 显示错误,并且通过exit()函数关闭所有文件,结束程序 运行。 运行。
调用方式: 调用方式: 文件指针变量名=fopen(文件名,文件打开方式 ; 文件名, 文件指针变量名 文件名 文件打开方式); 在使用时要注意: 在使用时要注意: (1)“文件名”是要打开的文件的文件名字,但在书写 文件名”是要打开的文件的文件名字, 时要符合C语言的规定。例如文件名“ 时要符合C语言的规定。例如文件名“a:\exam1.c”, , 由于’ 是转义字符的标志 是转义字符的标志, 由于’\’是转义字符的标志,所以在该函数中的文件名 应写成“ 应写成“a:\\exam1.c”。 。
目录 上一张 下一张
退出 退出
2. fputs()函数 . 函数 作用:向文件写入一个字符串。其调用形式为: 作用:向文件写入一个字符串。其调用形式为: fputs(字符串,文件型指针变量) (字符串,文件型指针变量) 其中字符串可以是字符串常量、 其中字符串可以是字符串常量、指向字符串的指 针变量、存放字符串数组的数组名。 针变量、存放字符串数组的数组名。写入文件成 功函数返回值为0,否则为EOF。注意:字符串的 功函数返回值为 ,否则为 。注意: 结束标志’ 不写入文件。 结束标志’\0’不写入文件。 不写入文件 例如: 例如: fputs(“Hello”,fp); fp为一个文件类型指针变量,上式将字符串中的 为一个文件类型指针变量, 为一个文件类型指针变量 字符H、 、 、 、 写入文件指针的当前位置 写入文件指针的当前位置。 字符 、e、l、l、o写入文件指针的当前位置。
目录 上一张 下一张
退出 退出
按格式要求读写的函数fprintf()、fscanf() 、 按格式要求读写的函数 1. fprintf()函数 . 函数
目录 上一张 下一张
退出 退出
文件关闭fclose 文件关闭 作用: 使文件指针变量与文件“脱钩” 作用 使文件指针变量与文件“脱钩”,释放 文件结构体和文件指针
防止由于误操作等原因破坏已经打开的文件 用法: fclose(文件指针 文件指针) 文件指针 例如:fclose(fp); 例如:
关闭fp指向的文件 即 不再指向该文件 关闭 指向的文件,即fp不再指向该文件 指向的文件
目录
上一张
下一张
退出 退出
#include <stdio.h> 例8.5(p295) ( ) #include <stdlib.h> #include <string.h> int main(void) { FILE *fp; char string[81]; if ((fp=fopen(“f:\\C3exe\\file2.txt”,”w”))==NULL) { printf(“can't open file”); exit(1); } while (strlen (gets(string))>0) { fputs(string, fp); fputs(”\n“,fp); } fclose(fp); return 0; }
文本文件是字符流 二进制码( 二进制码(二进制文件 binary stream) a.exe 执行文件 ) 二进制文件是直接把内存数据以二进制形式保存。 二进制文件是直接把内存数据以二进制形式保存。
对于一个整型数1234: : 对于一个整型数
以文本文件保存,它是四个字符: 文本文件保存,它是四个字符: 保存 ascii码分别是:49 50 51 52 ; 码分别是: 码分别是 二进制文件保存 它是1234的二进制数 保存, 的二进制数0x04D2 以二进制文件保存,它是 的二进制数
目录
上一张
下一张
退出 退出
对文件进行读写时需要知道: 对文件进行读写时需要知道: 文件名、文件状态、当前位置、缓冲区等有关信息等 文件名、文件状态、当前位置、缓冲区等有关信息等 编译系统定义了一个结构体类型FILE FILE来存放以上信息 C编译系统定义了一个结构体类型FILE来存放以上信息 stdio.h中 (在stdio.h中) typedef struct { … }FILE; 定义指向文件的指针变量: 用 FILE 定义指向文件的指针变量: *指针变量名 FILE *指针变量名 如: FILE *fp,*fq
退出
(2)打开文件时“文件打开方式”决定了系统可以对文件 打开文件时“文件打开方式” 进行的操作。 语言提供的“ASCII文件处理方式 文件处理方式” 进行的操作。C语言提供的“ASCII文件处理方式”及作用 见下表。 见下表。
说明:如果是二进制文件, 说明:如果是二进制文件,在使用时只要在模式后添加字 例 FILE *fp; 即可, 符b即可,如“rb 、“rb+ 分别表示读取二进制文件和以 fp= fopenrb”、 rb+”分别表示读取二进制文件和以 (“c:\\fengyi\\bkc\\test.dat”,”r”); 读取/写入打开二进制文件。 读取/写入打开二进制文件。 例 FILE *fp; char *filename=“c:\\fengyi\\bkc\\test.dat” fp= fopen(filename,”r”);
目录
上一张
下一张
退出 退出
8.4 文件的顺序读写
写一个字符到磁盘文件
fputc()函数 函数 函数fputc()的作用是向文件写入一个字符。其调用 的作用是向文件写入一个字符。 函数 的作用是向文件写入一个字符 形式为: 形式为: fputc(字符,文件型指针变量) (字符,文件型指针变量) 例: fputc(‘A’,fp); fp为一个文件类型指针变量,上式将字符常量’A’ 为一个文件类型指针变量, 为一个文件类型指针变量 上式将字符常量’ 也可以是字符型变量)写入文件当前位置, (也可以是字符型变量)写入文件当前位置,并且使文 件位置指针下移一个字节。如果写入操作成功, 件位置指针下移一个字节。如果写入操作成功,返回值 是该字符,否则返回EOF。 是该字符,否则返回 。
相关文档
最新文档