C语言程序设计-第13章 文件

更新时间:2023-08-13 14:48:01 阅读量: IT计算机 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

湖南工学院C语言程序设计,陈香兰教授指导。

第13章

文 件

所谓“文件”一般指存储在外部介质的数据的集合。在 程序运行时,程序本身和数据一般都存放在内存中。当程序 运行结束后,存放在内存中的数据被释放。 如果需要长期保存程序运行所需的原始数据,或程序运 行产生的结果,就必须以文件形式存储到外部存储介质上。

13.1 13.2 13.3 13.4 13.5

C语言文件概述 文件的类型指针 文件的打开与关闭 文件的读写 文件的定位

湖南工学院C语言程序设计,陈香兰教授指导。

13.1 C语言文件概述1.文件与文件名 文件是指存放在外部存储介质上的数据集合。 为标识一个文件,每个文件都必须有一个文件名, 其一般结构为: 主文件名[.扩展名] 文件命名规则,遵循操作系统的约定。 2.文件分类 可以从不同的角度对文件进行分类: (1)根据文件的内容,可分为程序文件和数据文件, 程序文件又可分为源文件、目标文件和可执行文件。 (2)根据文件的组织形式,可分为顺序存取文件和随 机存取文件。

湖南工学院C语言程序设计,陈香兰教授指导。

(3)根据文件的存储形式,可分为 ASCII码文件和二进制文件。 ASCII码文件的每1个字节存储1个字 符,因而便于对字符进行逐个处理。但一 般占用存储空间较多,而且要花费转换时 间(二进制与ASCII码之间的转换)。 二进制文件是把内存中的数据,原样输 出到磁盘文件中。可以节省存储空间和转 换时间,但1个字节并不对应1个字符,不 能直接输出字符形式。

湖南工学院C语言程序设计,陈香兰教授指导。

3.读文件与写文件 所谓读文件是指,将磁盘文件中的数据传送 到计算机内存的操作。 所谓写文件是指,从计算机内存向磁盘文件 中传送数据的操作。 4.构成文件的基本单元与流式文件 C语言将文件看作是由一个一个的字符 (ASCII码文件)或字节(二进制文件)组成的。 将这种文件称为流式文件。 而在其它高级语言中,组成文件的基本单位 是记录,对文件操作的基本单位也是记录。

湖南工学院C语言程序设计,陈香兰教授指导。

13.2

文件类型指针

系统给每个打开的文件都在内存中开辟一个区 域,用于存放文件的有关信息(如文件名、文件位 置等)。这些信息保存在一个结构类型变量中,该 结构类型由系统定义、取名为FILE。 注意:结构类型名“FILE”必须大写。 文件型指针变量的定义: FILE *fp; fp是一个指向FILE类型结构体的指针变量。可以 使fp指向某一个文件的结构体变量,从而通过该结 构体变量中的文件信息能够访问该文件。 。

湖南工学院C语言程序设计,陈香兰教授指导。

13.3

文件的打开与关闭

对文件进行操作之前,必须先打开该文件;使用结 束后,应立即关闭,以免数据丢失。 C语言规定了标准输入输出函数库,用fopen()函 数打开一个文件,用fclose()函数关闭一个文件。 13.3.1 文件的打开──fopen()函数 1.用法: FILE *fopen("文件

名","操作方式"); 2.功能:返回一个指向指定文件的指针。 3.函数原型:stdio.h 。 注:对文件操作的库函数,函数原型均在头文件 stdio.h中。后续函数不再赘述。

湖南工学院C语言程序设计,陈香兰教授指导。

(1)“文件名”是指要打开(或创建)的文件名。如 果使用字符数组(或字符指针),则不使用双引号。 (2)“操作方式”如表12-1所示。 例如,FILE *fp; fp=fopen("data.99","r"); 3.说明 (1)如果不能实现打开指定文件的操作,则fopen()函 数返回一个空指针NULL (其值在头文件stdio.h中被定义 为0)。 为增强程序的可靠性,常用下面的方法打开一个文件: if((fp=fopen("文件名","操作方式"))==NULL) { printf("can not open this file\n"); exit(0); }

湖南工学院C语言程序设计,陈香兰教授指导。

●关于exit()函数 1)用法:void exit([程序状态值]); 2)功能:关闭已打开的所有文件,结束程序运 行,返回操作系统,并将“程序状态值”返回给操 作系统。当“程序状态值”为0时,表示程序正常 退出;非0值时,表示程序出错退出。 (2)“r(b)+”与“a(b)+”的区别:使用前 者打开文件时,读写位置指针指向文件头;使用后 者时,读写指针指向文件尾。(3)使用文本文件向计算机系统输入数据时, 系统自动将回车换行符转换成一个换行符;在输出 时,将换行符转换成回车和换行两个字符。

湖南工学院C语言程序设计,陈香兰教授指导。

使用二进制文件时,内存中的数据形式与数据文 件中的形式完全一样,就不再进行转换。 (4)有些C编译系统,可能并不完全提供上述对 文件的操作方式,或采用的表示符号不同,请注意所 使用系统的规定。 (5)在程序开始运行时,系统自动打开三个标准 文件,并分别定义了文件指针: 1)标准输入文件——stdin:指向终端输入(一 般为键盘)。如果程序中指定要从stdin所指的文件输 入数据,就是从终端键盘上输入数据。

湖南工学院C语言程序设计,陈香兰教授指导。

2)标准输出文件——stdout:指向终端输出 (一般为显示器)。 3)标准错误文件——stderr:指向终端标准 错误输出(一般为显示器)。13.3.2 文件的关闭──fcolse()函数 1.用法: int fclose(FILE *文件指针); 2.功能:关闭“文件指针”所指向的文件。 如果正常关闭了文件,则函数返回值为0;否则, 返回值为非0。 例如,fclose(fp);/*关闭fp所指向的文件*/

湖南工学院C语言程序设计,陈香兰教授指导。

13.4

文件的读写操作

文件打开之后,就可以对它进行读与写的操作 了。 13.3.1 13.3.2 13.3.3 13.3.4 13.3.5 读/写文件中的一个字符 读/写一个字符串 读/写一个数据块 对文件进行格式化读/写 读/写函数的选用原则

湖南工学院C语言程序设计,陈香兰教授指导。

13.4.1 读/写文件中的一个字符1.将一个字符写到文件中──fputc()函数 [案例] 将键盘上输入的一个字符串(以“@”作为结束字 符),以ASCII码形式存储到一

个磁盘文件中。

#include “stdio.h” main() { FILE *fp; char ch,filen[20]; scanf(“%s”,filen); { printf("the number of arguments not correct\n\n"); printf(“Usage: 可执行文件名 filename \n”); }

湖南工学院C语言程序设计,陈香兰教授指导。

if((fp=fopen(filen[1],“w”))==NULL) { printf("can not open this file\n"); exit(0); /*w为只读(312页)*/ } /*输入字符,并存储到指定文件中*/ for( ; (ch=getchar()) != '@' ; ) fputc(ch,fp); /*输入字符并存储到文件中*/ fclose(fp); /*关闭文件*/ } [程序演示]将一个字符写到文件中──fputc()函数

程序运行情况: abcdefg1234567@←┘

湖南工学院C语言程序设计,陈香兰教授指导。

[案例13.1] 将键盘上输入的一个字符串(以“#”作为结束字 符),以ASCII码形式存储到一个磁盘文件中。 /*使用格式:可执行文件名 要创建的磁盘文件名*/ #include <stdio.h> main() (输入文件1后输入字符串) { FILE *fp; char ch,filen[10]; scanf(“%s”,filen); if((fp=fopen(filen,“w”))==NULL { printf("can not open this file\n"); exit(0);} ch=getchar(); /*接收最后输入的回车字符*/ ch=getchar(); /*接收输入的第一个字符*/ while(ch!= # ) {fputc(ch,fp);putchar(ch); ch=getchar();} fclose(fp); }

湖南工学院C语言程序设计,陈香兰教授指导。

1、函数 fputc(): 1)用法:int fputc(字符数据,文件指针); 其中“字符数据”,既可以是字符常量,也可以是字符 变量。 2)功能:将字符数据输出到“文件指针”所指向的文 件中去,同时将读写位置指针向前移动1个字节(即指向下 一个写入位置)。 如果输出成功,则函数返回值就是输出的字符数据;否 则,返回一个符号常量EOF(其值在头文件stdio.h中,被 定义为-1)。

湖南工学院C语言程序设计,陈香兰教授指导。

[例13.2] 将键盘上输入的字符串,存储到另一个磁盘文件中。(输入文件1和文件2)

#include <stdio.h> main() { FILE *in,*put; char ch,infilen[10],outl[10]; printf(“name:”); scanf(“%s”,infilen); scanf(“%s”,outl); if((in=fopen(infilen,“r”))==NULL) { printf("can open this file\n"); exit(0);} if((in=fopen(outl,“w”))==NULL) printf("not open this file\n"); exit(0);} while(!feof(in))fputc(fgetc(in),out); fclose(in); fclose(in); }

CCCC

湖南工学院C语言程序设计,陈香兰教授指导。

2.从文件中读入一个字符──fgetc()函数 [案例] 顺序显示创建的磁盘ASCII码文件。 /*参数:带参主函数,使用格式:可执行文件名 源文件名*/ #include "stdio.h" main(int argc, char *argv[]) { FILE *fp; char ch; if(argc!=2) /*参数个数不对*/ { printf("the number of arguments not correct\n"); printf(“\n Usage: 可执行文件名 源文件名"); exit(0); }

湖南工学院C语言程序设计,陈香兰教授指导。

if ((fp=fopen(argv[1],"r"))==NULL) { printf("can not open source file\n"); exit(0); } /*顺序输出文件的内容*/ for(; (ch=fgetc(fp))!=EOF; ) putchar(ch); /*顺序读入并显示*/ fclose(fp); /*关闭打开的文件*/ } 程序运行情况: abcdefg1234567

湖南工学院C语言程序设计,陈香兰教授指导。

(1)库函数fgetc() 1)用法:int fgetc(文件指针); 2)功能:从“文件指针”所指向的文件中,读入一 个字

符,同时将读写位置指针向前移动1个字节(即指 向下一个字符)。该函数无出错返回值。 例如,fgetc(fp)表达式,从文件fp中读一个字符,同 时将fp的读写位置指针向前移动到下一个字符。(2)关于符号常量EOF 在对ASCII码文件执行读入操作时,如果遇到文件 尾,则读操作函数返回一个文件结束标志EOF(其值在 头文件stdio.h中被定义为-1)。 在对二进制文件执行读入操作时,必须使用库函数 feof()来判断是否遇到文件尾。

湖南工学院C语言程序设计,陈香兰教授指导。

[案例] 实现制作ASCII码文件副本的功能。 /*程序功能:制作ASCII码文件的副本*/ /*使用格式:可执行文件名 源文件名 目标文件名*/ #include "stdio.h" main(int argc, char *argv[]) { FILE *input, *output; /* input:源文件指针, output:目标文件指针 */ char ch; if(argc!=3) /*参数个数不对*/ { printf("the number of arguments not correct\n"); printf("\n Usage: 可执行文件名 source-file dest-file"); exit(0); }

湖南工学院C语言程序设计,陈香兰教授指导。

if ((fp=fopen(argv[1],"r"))==NULL) /*打开源文件失败*/ { printf("can not open source file\n"); exit(0); } if ((fp=fopen(argv[2],"w"))==NULL) /*创建目标文件失败*/ { printf("can not create destination file\n"); exit(0); } /*复制源文件到目标文件中*/ for( ; (!feof(input)) ; ) fputc(fgetc(input),output); fclose(input); fclose(output); /*关闭源文件和目 标文件*/ }

本文来源:https://www.bwwdw.com/article/qlhj.html

Top