1 / 17

第十三章 文件

高级语言程序设计. 第十三章 文件. 莆田学院 《C 语言程序设计 》 精品课程组 2005 年 6 月 制作. 目录. 一、 C 文件概述 二、文件操作. 一、 C 文件概述. C 程序与磁盘文件 本章讨论的文件主要是指可供 C 程序在执行过程中从磁盘读取数据或写入数据的文件。. 磁盘文件分类. 按其存储方式, C 文件可以分为 : ASCII 文件(文本文件) 按数据的 ASCII 编码方式存放 ( 可用文字编辑软件如“记事本”打开来看)。 二进制文件 按数据在内存中存储的形式原样存放 (0 和 1 的集合 )

Download Presentation

第十三章 文件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 高级语言程序设计 第十三章 文件 莆田学院《C语言程序设计》精品课程组 2005年6月 制作

  2. 目录 • 一、C文件概述 • 二、文件操作

  3. 一、C文件概述 • C程序与磁盘文件 本章讨论的文件主要是指可供C程序在执行过程中从磁盘读取数据或写入数据的文件。

  4. 磁盘文件分类 按其存储方式,C文件可以分为: • ASCII文件(文本文件) 按数据的ASCII编码方式存放(可用文字编辑软件如“记事本”打开来看)。 • 二进制文件 按数据在内存中存储的形式原样存放(0和1的集合) • C系统在处理这些文件时,并不区分类型,都看成是字符流(即以字节为存取单位)。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制,故称“流式文件”。

  5. C程序与文件读写 • ANSI C提供四种读写文件的方法,通过四组函数进行: • 读写一个字符: fgetc fputc • 读写一个字符串: fgets fputs • 格式化读写: fscanf fprintf • 读写一个“记录”(成“块”读写):fread fwrite • 文件读写(文件操作)的基本步骤是: • 1、定义文件类型指针变量 • 2、打开文件 • 3、读写文件 • 4、关闭文件

  6. 二、文件操作 • 文件打开/关闭程序的基本形式 示例(设文件名为ABC.TXT): main( ) { FILE *fp; /*声明文件型指针变量*/ … fp=fopen(“ABC.txt”,“w”); /*按指定文件使用方式打开文件*/ … /*输入输出等*/ fclose(fp); /*关闭文件*/ }

  7. 示例程序说明 ① FILE *fp; FILE是系统定义的结构体类型。 P310 ② 文件打开后,fp即代表该文件 ③ 通常需要判断该文件是否打开 打开成功时,fopen( )返回文件信息区的起始地址,失败则返回0(NULL)。 if ((fp=fopen(…))==NULL) { printf(“打开失败”); exit(0); }

  8. 示例程序说明(续) ④文件使用方式 P312表13.1 基本方式是 r(只读) w(只写) a(追加) 加b: 对二进制文件 加+ :读写 注意:r和a要求该文件必须存在,否则出错(返回NULL) w为新建文件(如原来存在同名文件,被复盖)

  9. 二、文件操作 • 文件的读写P313 设文件指针变量为fp ① 单字符读写 P314 写入 fputc(ch,fp) 读入 x=fgetc(fp) 遇到文件末时,返回EOF(文 件结束符,即-1) 通常可用while(ch!=EOF) 或while(!feof(fp))控制读取循环。 P314/315 比较: putchar(c) x=getchar( )

  10. 文件的读写(二) ② 字符串读写 P323 写入 fputs(str,fp) 读入 fgets(str,n,fp) 从fp所指文件中读入n-1个字节数据给字符数组str(未尾加’\0’,遇EOF即结束) 比较:puts(str) gets(str)

  11. #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的结果。

  12. 示例 #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+’后连续运行几次,看看结果。

  13. 文件的读写(三) ③ 格式化读写 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);

  14. 文件的读写(四) ④ 读写一个“记录”(成“块”读写) P317 适用于结构体等复杂实体。 写入 fread(p,size,n,fp) 读入 fwrite(p,size,n,fp) p-实体指针 size-字节数 n-多少次 fp-文 件指针 调用成功,返回n值。 • 示例: P318例13.3

  15. 文件的定位 文件中有一个位置指针,指向当前读写的位置。顺序读写一个文件时,每读写完一个字符,位置指针自动下移一个字符位置。以下函数可用于强制改变位置指针的位置。 • rewind(fp) 使fp所指文件位置指针回到文件开头(以便从头再读写) • fseek(fp,n,i) 改变文件的位置指针

  16. 关于fseek(fp,n,i) • fp 文件指针 • n位移量(以起始点为基点,向前移动的字节数,负数 为倒移的字节数) • i 起始点 函数ftell(fp)用于获得位置指针在文件中的当前位置(用相对于文件开头的位移量来表示)。

  17. 示例 以下程序的功能是。 #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的长度

More Related