第10章 文件操作_zlh

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
24
计 算 机 基 础 教 研 室
从磁盘myfile.txt 文件中读取字符,要求将它 们中的小写字母显示输出,直到文件结束。
#include <stdlib.h>
计 算 机 基 础 教 研 室
#include <stdio.h> main() { FILE *fp; char ch; if ((fp=fopen(”myfile.txt","r") )==NULL) { printf("cannot open this file"); exit(0); } while(!feof(fp)) { ch=fgetc(fp) ; if (ch<=’z'&&ch>=’a') putchar(ch); } fclose(fp); 25 }
计 算 机 基 础 教 研 室
int write(int handle, void *buf, 返回值为实 unsigned len);

buf是要写
功能:把从buf开始的len个字节写入文件
15
C语言中的文件访问(close)

int close(int handle);
NOTE:驱动器 中无盘或盘空间 关闭成功返回0, 不够时会引起关 int ret = 否则返回-1 close(fd); 闭失败
得到当前位置指针的位置
fileLength = lseek(fh, 0L, SEEK_END); 得到文件长度
计 算 机 基 础 教 研 室
18
C语言独特的文件访问


下面介绍的函数均定义在<stdio.h>中
FILE *fopen(const char *filename, const char *mode); filename是文件名,包含路径。如果不含路 径,表示打开当前目录下的文件 mode是打开方式
12

read:读文件


write:写文件


close:关闭文件

计 算 机 基 础 教 研 室

seek:文件定位

C语言中的文件访问(open) 包含路径。如果不含路

pathname是文件名,
#include <io.h> #include <fcntl.h> int open(const char *pathname, int access);
高级语言程序设计
计算机基础教研室
第10章 文件操作
南京邮电大学计算机学院 计算机基础教研室
本章作业
补充 有一磁盘文件“employee”,内存放职工的数 据。每个职工的数据包括职工姓名、职工号、 性别、年龄、住址、工资、健康状况、文化程 度。今要求将职工姓名、工资的信息单独抽取 出来另建一个简明的职工工资文件。
access是打开方式,常用为 返回值为文件句柄 int fd=open("C:\\CONFIG.SYS",O_RDWR|O_CREAT);
径,表示打开当前目录 下的文件
O_RDONLY、O_WRONLY、 (File Handle),留 O_RDWR与O_CREAT、 计 算 O_TRUNC、O_APPEND的或 机 待以后使用。如果打 基 运算 础 开失败,返回值为-1
23
计 算 机 基 础 教 研 室
从磁盘myfile.txt 文件中读取字符,要求将它 们中的小写字母显示输出,直到文件结束。
#include <stdlib.h> ____________ main() { FILE *fp; char ch; if ((fp= )==NULL) { printf("cannot open this file"); exit(0); } while(!feof(fp)) { ch= ; if (ch<=’z'&&ch>=’a') putchar(ch); } ____________ ; }
7
计算机中的流的概念


时光不能倒流,但计算机中的很多流都是会倒流的

计 算 机 基 础 教 研 室

文件(File)的概念


计算机的内存容易健忘,所以数据必须保存在硬盘、软盘、 光盘和磁带等“不健忘”的外存上 这些能大量、永久保存信息的媒介,一般都以文件的形式 给用户及应用程序使用 文件:一般指存储在外部介质上具有名字(文件名)的一 组相关数据的集合
C语言独特的文件访问
字符串读写 char *fgets(char *s,int n,FILE *fp); 特例 fgets(buf, sizeof(buf), stdin);

计 算 机 基 础 教 研 室
int fputs(const char *s, FILE *fp);
26
分析以下程序的功能:
计 算 机 基 础 教 研 室
11
文件访问

基本模式

open:打开文件

获得对此文件的指针、引用和句柄等,以证明可以使用此文件 参数一般指明要读多少字节,读到哪块内存。 每次调用此功能,都是接着上次调用的结束位置读(所以是个输入流) 参数一般指明把哪块内存的内容写入文件,要写多少字节。 每次调用此功能,都是接着上次调用的结束位置写 (所以是个输出流) 表明操作结束,不再使用此文件。 文件使用完毕必须关闭,否则影响系统性能 随机控制流的当前位置
C语言独特的文件访问
字符读写 int fgetc(FILE *fp); 从fp读出一个字符;将读写位置指针向前移动 1个字节并返回 若读到文件尾,则返回EOF

计 算 机 基 础 教 研 室
int fputc(int c, FILE *fp); 向fp输出字符c;同时将读写位置指针向前

计 算 机 基 础 教 研 室
20
文件指针(File Pointer)
FILE *fp ; typedef struct 是FILE型指针变量 { 标识一个特定的磁盘文件 short level; /*缓冲区‘满’或‘空’的 程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold;/*如无缓冲区不读字符*/ short bsize; /*缓冲区的大小*/ 计 unsigned char *buffer;/*数据缓冲区的位置*/ 算 机 unsigned char *curp; /*指针当前的指向*/ 基 础 unsigned istemp; /*临时文件指示器*/ 教 研 short token; /*用于有效性检查*/ 室 21
计 算 机 基 础 教 研 室
作用:如果需要长期保存程序运行所需的原始数 据,或程序运行产生的结果,就必须以文件形 式存储到外部存储介质上。
9
文件的类型


二进制文件 是一种字节序列,没有字符变换 按照数据在内存中的存储形式存储到文件 如整数127,在内存占2个字节,为0000000001111111, 则文件中也存储为0000000001111111,占2个字节 文本文件/ASCII码文件 是一种字符序列 文件中存储每个字符的ASCII码 如整数127在文件中占3个字节,分别存放这3个字符的 ASCII码,即49,50,55
操作系统有能力重定向标准输入与输出,比如让文件 作为标准输入(标准输出) 这种重定向程序本身是感觉不到的 自来水厂
6
流(Stream)

水流

“子在川上曰:逝者如斯夫” 一般称为数据流,也有叫做字节流、比特流的,还有很 具体的文件流、视频流、音频流等 如果你想重新读已经读过的数据,或者要修改已经写入 的数据,可以发出流控(Flow Control)命令 不会倒流的数据流也很多,例如网络上的数据流。网络 和数据线等介质只有很小的数据缓冲区,没有大量存储 的能力
计 算 机 基 础 教 研 室
10
文件的格式


数据必须按照存入的类型读出,才能恢复其本来面貌 公开的标准格式 如bmp、tif、gif、jpg和mp3等类型的文件 ,有大量 软件能生成和使用这些类型的文件 也有不公开、甚至加密的文件格式 如Microsoft Word的doc格式就不公开,所以至今还 没有Word以外的其它软件能完美地读出doc文件
buf是保 存读入 len是最 内容的 大可以 内存指 读入的 针 字节数 int n_read = read(fd, buf, BUFSIZE);
功能:从文件中读len个字节存到buf开始的地址单元中
14
handle是open C语言中的文件访问(write)
获得的文件句柄
际写入的字 入内容的内 节数,可能 int n_write = write(fd, buf, BUFSIZE); len是写入多 存指针 小于len。 少字节 返回-1表示 出错

为标识一个文件,每个文件都必须有一个文件名,其一般结构为: 主文件名[.扩展名] 文件命名规则,遵循操作系统的约定。
计 算 机 基 础 教 研 室

用文件可长期保存数据,并实现数据共享
8
文件(File)的概念

程序中的文件


在程序运行时由程序在磁盘上建立一个文件,并通 过写操作将数据存入该文件; 或由程序打开磁盘上的某个已有文件,并通过读操 作将文件中的数据读入内存供程序使用

计 算 机 基 础 教 研 室
3
本章内容
流 文件操作

计 算 机 基 础 教 研 室
4
I/O设备 标准输入设备

输入设备



键盘、鼠标 软盘、硬盘(以文件的形式) 串行口、并行口、USB接口、网络端口 标准输出设备 扫描仪、视频采集卡、电视卡、游戏杆、话筒 ……

计 算 机 基 础 教 研 室
返回值为指向此文件的指针,留待以后使用 常用为"r"、"w"、"rw"和"a",分别表示
计 算 机 基 础 教 研 室
只读、只写、读写和添加 如果打开失败,返回值为NULL "rb"表示只读二进制文件
19
C语言独特的文件访问
例如: FILE *fp=fopen(“f:\\ABC.TXT”,”a+”); 以追加方式打开文本文件ABC.TXT FILE *fp=fopen(“f:\\ABC.TXT”,”ab+”); 以追加方式打开二进制文件ABC.TXT int fclose(FILE *fp); 关闭文件
移动1个字节

若写入错误,则返回EOF,否则返回c
22
举例
if ((fp=fopen(“f:\\ABC.TXT”,"r"))==NULL) { printf("can not open source file\n"); exit(0); } /*顺序输出文件的内容*/ for( ; (ch=fgetc(fp)) != EOF; ) putchar(ch); /*顺序读入并显示*/ fclose(fp); /*关闭打开的文件*/ }
输出设备


显示器、打印机 软盘、硬盘(以文件的形式) 串行口、并行口、USB接口、网络端口 音箱 ……
5
标准输入输出

字符界面的操作系统一般都提供标准输入与输出 设备

DOS、Linux、Unix……

一般情况,标准输入就是键盘,标准输出就是终 端显示器

计 算 机 基 础 教 研 室
计 算 机 基 础 教 研 室
功能:关闭文件,释放系统资源
16
C语言中的文件访问(lseek)

long lseek(int handle long offset int fromwhere);
SEEK_SET-----文件开始 SEEK_CUR-----当前位置 SEEK_END-----文件末尾
iபைடு நூலகம்t
fromwhere:
pos = lseek(fd, 100L, SEEK_CUR); fromwhere的位置
偏移多少,可以为 负数
offset是相对
计 算 机 基 础 教 研 室
成功返回移位后的当前位置,从文件头算起;
否则返回-1L
17
几个巧妙运用
curPos = lseek(fh, 0L, SEEK_CUR);
教 研 室
13
C语言中的文件访问(read)
int read(int handle, void *buf, unsigned len);
handle 是open 入的字节数,可能 大于len。返回0 获得的 表示读到了末尾, 文件句 返回-1表示出错 柄
返回值为实际读
计 算 机 基 础 教 研 室
相关文档
最新文档