170 likes | 314 Views
高级语言程序设计. 第十三章 文件. 莆田学院 《C 语言程序设计 》 精品课程组 2005 年 6 月 制作. 目录. 一、 C 文件概述 二、文件操作. 一、 C 文件概述. C 程序与磁盘文件 本章讨论的文件主要是指可供 C 程序在执行过程中从磁盘读取数据或写入数据的文件。. 磁盘文件分类. 按其存储方式, C 文件可以分为 : ASCII 文件(文本文件) 按数据的 ASCII 编码方式存放 ( 可用文字编辑软件如“记事本”打开来看)。 二进制文件 按数据在内存中存储的形式原样存放 (0 和 1 的集合 )
E N D
高级语言程序设计 第十三章 文件 莆田学院《C语言程序设计》精品课程组 2005年6月 制作
目录 • 一、C文件概述 • 二、文件操作
一、C文件概述 • C程序与磁盘文件 本章讨论的文件主要是指可供C程序在执行过程中从磁盘读取数据或写入数据的文件。
磁盘文件分类 按其存储方式,C文件可以分为: • ASCII文件(文本文件) 按数据的ASCII编码方式存放(可用文字编辑软件如“记事本”打开来看)。 • 二进制文件 按数据在内存中存储的形式原样存放(0和1的集合) • C系统在处理这些文件时,并不区分类型,都看成是字符流(即以字节为存取单位)。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制,故称“流式文件”。
C程序与文件读写 • ANSI C提供四种读写文件的方法,通过四组函数进行: • 读写一个字符: fgetc fputc • 读写一个字符串: fgets fputs • 格式化读写: fscanf fprintf • 读写一个“记录”(成“块”读写):fread fwrite • 文件读写(文件操作)的基本步骤是: • 1、定义文件类型指针变量 • 2、打开文件 • 3、读写文件 • 4、关闭文件
二、文件操作 • 文件打开/关闭程序的基本形式 示例(设文件名为ABC.TXT): main( ) { FILE *fp; /*声明文件型指针变量*/ … fp=fopen(“ABC.txt”,“w”); /*按指定文件使用方式打开文件*/ … /*输入输出等*/ fclose(fp); /*关闭文件*/ }
示例程序说明 ① FILE *fp; FILE是系统定义的结构体类型。 P310 ② 文件打开后,fp即代表该文件 ③ 通常需要判断该文件是否打开 打开成功时,fopen( )返回文件信息区的起始地址,失败则返回0(NULL)。 if ((fp=fopen(…))==NULL) { printf(“打开失败”); exit(0); }
示例程序说明(续) ④文件使用方式 P312表13.1 基本方式是 r(只读) w(只写) a(追加) 加b: 对二进制文件 加+ :读写 注意:r和a要求该文件必须存在,否则出错(返回NULL) w为新建文件(如原来存在同名文件,被复盖)
二、文件操作 • 文件的读写P313 设文件指针变量为fp ① 单字符读写 P314 写入 fputc(ch,fp) 读入 x=fgetc(fp) 遇到文件末时,返回EOF(文 件结束符,即-1) 通常可用while(ch!=EOF) 或while(!feof(fp))控制读取循环。 P314/315 比较: putchar(c) x=getchar( )
文件的读写(二) ② 字符串读写 P323 写入 fputs(str,fp) 读入 fgets(str,n,fp) 从fp所指文件中读入n-1个字节数据给字符数组str(未尾加’\0’,遇EOF即结束) 比较:puts(str) gets(str)
#define NULL 0 #define EOF -1 #include <stdio.h> #include <stdlib.h> FILE *fpr,*fpw; int main() { char ch; if ((fpr=fopen("d:\\tc\\TEST.DAT","r+"))==NULL) { printf("打开失败"); exit(0); } if ((fpw=fopen("d:\\tc\\abc.txt","ab+"))==NULL) { printf("打开失败"); exit(0); } ch=getc(fpr); while (ch!=EOF) { printf("%c",ch); fputc(ch,fpw); ch=getc(fpr); } fclose(fpr); fclose(fpw); return 0; } 示例 • 运行之,打开两个文件观看结果。 • 将fpw打开方式改为’a’后连续运行几次,看看abc.txt的结果。
示例 #define NULL 0 #include <stdio.h> FILE *fp; char *s="123"; main() { char ch; clrscr(); if ((fp=fopen("d:\\tc\\a.dat", "r+")) ==NULL) { printf("文件打开失败"); exit(0); } fgets(s,10,fp); puts(s); fputs("Hello,",fp); fputs("my friends!",fp); fclose(fp); } • 运行之,打开文件a.dat观看结果。 • 将fp打开方式改为’a+’后连续运行几次,看看结果。
文件的读写(三) ③ 格式化读写 P321 适用于一般实体,如数值型变量。 • fscanf(fp,“%d,%f”,&a,&b); 将磁盘文件中的数据送给变量a,下一个送给变量b • fprintf(fp,“%d,%6.2f”,a,b); 将变量a和b按%d和%f格式输出到fp所指文件上 比较:scanf(“%d,%f”,&a,&b); printf(“%d,%6.2f”,a,b);
文件的读写(四) ④ 读写一个“记录”(成“块”读写) P317 适用于结构体等复杂实体。 写入 fread(p,size,n,fp) 读入 fwrite(p,size,n,fp) p-实体指针 size-字节数 n-多少次 fp-文 件指针 调用成功,返回n值。 • 示例: P318例13.3
文件的定位 文件中有一个位置指针,指向当前读写的位置。顺序读写一个文件时,每读写完一个字符,位置指针自动下移一个字符位置。以下函数可用于强制改变位置指针的位置。 • rewind(fp) 使fp所指文件位置指针回到文件开头(以便从头再读写) • fseek(fp,n,i) 改变文件的位置指针
关于fseek(fp,n,i) • fp 文件指针 • n位移量(以起始点为基点,向前移动的字节数,负数 为倒移的字节数) • i 起始点 函数ftell(fp)用于获得位置指针在文件中的当前位置(用相对于文件开头的位移量来表示)。
示例 以下程序的功能是。 #include "stdio.h" main( ) { FILE *fp; long int n; fp=fopen("wj.txt","rb"); fseek(fp,0,SEEK_END); n=ftell(fp); fclose(fp); printf("%ld",n); } A)输出文件wj.txt的起始地址 B)输出文件wj.txt的终止地址 C)输出文件wj.txt的错误信息 D)输出文件wj.txt的长度