c语言初级教程-第10章_文件操作

上传人:第*** 文档编号:49342468 上传时间:2018-07-27 格式:PPT 页数:45 大小:435.50KB
返回 下载 相关 举报
c语言初级教程-第10章_文件操作_第1页
第1页 / 共45页
c语言初级教程-第10章_文件操作_第2页
第2页 / 共45页
c语言初级教程-第10章_文件操作_第3页
第3页 / 共45页
c语言初级教程-第10章_文件操作_第4页
第4页 / 共45页
c语言初级教程-第10章_文件操作_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《c语言初级教程-第10章_文件操作》由会员分享,可在线阅读,更多相关《c语言初级教程-第10章_文件操作(45页珍藏版)》请在金锄头文库上搜索。

1、第10章 文件操作1*2I/O设备输入设备 键盘、鼠标 软盘、硬盘、光驱(以文件的形式) 串行口、并行口、USB接口、网络端口 扫描仪、视频采集卡、电视卡、游戏杆、话筒 输出设备 显示器、打印机 软盘、硬盘、CD-R/DVD-R(以文件的形式) 串行口、并行口、USB接口、网络端口 音箱 单纯的输入设备或者单纯的输出设备越来越少*3标准输入输出字符界面的操作系统一般都提供标准输入与输出设备 DOS、Linux、Unix一般情况,标准输入就是键盘,标准输出就是终端显 示器 操作系统有能力重定向标准输入与输出,比如让文件作 为标准输入,打印机作为标准输出 这种重定向程序本身是感觉不到的自来水厂自来

2、水厂*4DOS下的标准输入输出重定向程序prog如下 main() char c;while (c=getchar() != n)putchar(+c); 输入重定向 prog outfile*5流(Stream)计算机中的流的概念 一般称为数据流,也有叫做字节流、比特流的,还有 很具体的文件流、视频流、音频流等时光不能倒流,但计算机中的很多流都是会倒流的 如果你想重新读已经读过的数据,或者要修改已经写 入的数据,可以发出流控(Flow Control)命令 不会倒流的数据流也很多,例如网络上的数据流。网 络和数据线等介质只有很小的数据缓冲区,没有大量存 储的能力 *6文件(File)的概念文

3、件 一般指存储在外部介质上具有名字(文件名)的一组相 关数据的集合 用文件可长期保存数据,并实现数据共享程序中的文件 在程序运行时由程序在磁盘上建立一个文件,并通过写 操作将数据存入该文件;或由程序打开磁盘上的某个已有 文件,并通过读操作将文件中的数据读入内存供程序使用*7文件与流在C语言中,文件可以是磁盘文件、终端显示 器或打印机等等。程序通过打开操作把流与设备联系起来,文件 打开后,可以在程序和文件之间交换数据。程序通过关闭操作断开流与文件的联系。所有流的性质都一样。因为流与设备无关,所 以能写入磁盘文件的同一函数也能写入另一设 备,如控制台终端等。但文件的能力则可能不同。例如,磁盘文件可

4、 以支持随机存取,而键盘则不行。*8文件的存放可以建立若干目录(文件夹), 在目录里保存文件,同一级目录 里保存的文件不能同名。对使用者而言,只要知道文件的 路径(全目录)和文件名,就能 使用该文件 D:homeSunnermain.c 这都是托OS的福*9文件的格式二进制文件 是一种字节序列,没有字符变换 按照数据在内存中的存储形式存储到文件 如整数127,在内存占2个字节,为 0000000001111111,则文件中也存储为 0000000001111111,占2个字节文本文件/ASCII码文件 是一种字符序列 文件中存储每个字符的ASCII码 如整数127在文件中占3个字节,分别存放这

5、3个字符 的ASCII码,即49,50,55*10文件的格式数据必须按照存入的类型读出,才能恢复其本来面貌 公开的标准格式 如bmp、tif、gif、jpg和mp3等类型的文件 ,有大量软 件能生成和使用这些类型的文件 也有不公开、甚至加密的文件格式 如Microsoft Word的doc格式就不公开,所以至今还没 有Word以外的其它软件能完美地读出doc文件 int 100float 100.0 字符串“100“ 字符串“END“ 64 00 00 00C8 42 31 30 30 00 45 4E 44 00D B 1 0 0 E N DTEST.BIN内容 (十六进制)对应的 ASCI

6、I字符*11文件访问文件访问的基本模式 open:打开文件,获得对此文件的指针、引用和句 柄等,以证明可以使用此文件 read:读文件。参数一般指明要读多少字节,读到 哪块内存。每次调用此功能,都是接着上次调用的结 束位置读。(所以是个输入流) write:写文件。参数一般指明把哪块内存的内容写 入文件,要写多少字节。每次调用此功能,都是接着 上次调用的结束位置写。 (所以是个输出流) close:关闭文件,表明操作结束,不再使用此文件 。文件使用完毕必须关闭,否则影响系统性能 seek:随机控制流的当前位置,文件定位*12C语言中的文件访问下面介绍的函数均定义在和中int open(cons

7、t char *pathname, int access); int fd = open(“C:CONFIG.SYS“, O_RDWR | O_CREAT);pathname是文件名,包含路径。如果不含路径,表示打开当 前目录下的文件access是打开方式,常用为O_RDONLY、O_WRONLY、 O_RDWR与O_CREAT、O_TRUNC、O_APPEND的位或运算返回值为文件句柄(File Handle) ,留待以后使用。如果 打开失败,返回值为-1*13C语言中的文件访问int read(int handle,void *buf, unsigned len); int n_read

8、= read(fd, buf, BUFSIZ);handle是open获得的文件句柄buf是保存读入内容的内存指针len是最大可以读入的字节数返回值为实际读入的字节数,不可能大于len。 返回0表示读到了末尾,返回-1表示出错*14C语言中的文件访问int write(int handle,const void *buf,unsigned len); int n_write = write(fd, buf, BUFSIZ);handle是open获得的文件句柄buf是要写入内容的内存指针len是写入多少字节返回值为实际写入的字节数,可能小于len。 返回-1表示出错*15C语言中的文件访问in

9、t close(int handle); int ret = close(fd);handle是open获得的文件句柄关闭成功返回0,否则返回-1*16C语言中的文件访问long lseek(int handle,long offset,int fromwhere); int pos = lseek(fd, 100L, SEEK_CUR);handle是open获得的文件句柄offset是相对fromwhere的位置偏移多少,可以为负数fromwhere可以是SEEK_SET、SEEK_CUR或SEEK_END中 的一个,分别表示文件头、当前位置和文件结尾 成功返回移位后的当前位置,从文件头算

10、起;否则返回-1L几个巧妙运用 curPos = lseek(fh, 0L, SEEK_CUR); fileLength = lseek(fh, 0L, SEEK_END);得到文件长度*17错误处理错误处理 文件错误一般都是外界造成的,出错率很高 被删除、修改、磁盘空间满、被其他文件打开通过判断返回值发现错误 所有文件操作出错时都返回-1出错处理 打印错误信息给用户,等待用户的处理void perror(const char *s); 向标准错误输出字符串s,随后附上错误的文字说 明*18错误处理例10.1#include #include #include #include main()

11、/* c:abc.abc文件并不存在 */ int fh = open(“c:abc.abc“, O_RDONLY | O_BINARY);if (fh = -1)/* fh必然为-1 */ perror(“Cant open c:abc.abc. Error“); Cant open Cant open c:abc.abcc:abc.abc. Error: No such file or directory. Error: No such file or directory*19C语言独特的文件访问下面介绍的函数均定义在中FILE *fopen(const char *filename,co

12、nst char *mode); FILE *fp = fopen(“C:CONFIG.SYS“,“rw“);filename是文件名,包含路径。如果不含路径, 表示打开当前目录下的文件 mode是打开方式,常用为“r“、“w“、“rw“和 “a“,分别表示只读、只写、读写和添加返回值为指向此文件的指针,留待以后使用。如果打开失败,返回值为NULL*20v mode:对应二进制文件对应文本文件“r” 只读 必须是已存在的文件。 “w” 只写 不论该文件是否存在,都新建一个文件。 “a” 追加 向文本文件尾增加数据,该文件必须存在 “r+” 读写 打开一个已存在的文件,用于读写。“w+” 读写

13、建立一个新文件,可读可写。 “a+” 读写 向文件尾追加数据,也可读。 “rb” “wb” “ab” “rb+” “wb+” “ab+”*21文件指针FILE *fp ; 是FILE型指针变量 标识一个特定的磁盘文件 与文件相关联的每个流都有一个FILE类型的控制结构 ,定义有关文件操作的信息,用户绝对不应修改*22文件指针(File Pointer)typedef structshort level; /*缓冲区满或空的 程度*/unsigned flags; /*文件状态标志*/char fd; /*文件描述符*/unsigned char hold; /*如无缓冲区不读字 符*/shor

14、t bsize; /*缓冲区的大小*/unsigned char *buffer;/*数据缓冲区的位 置*/unsigned char *curp; /*指针当前的指向*/unsigned istemp; /*临时文件指示器*/short token; /*用于有效性检查*/FILE;在stdio.h文件中定义*23C语言独特的文件访问int fgetc(FILE *fp);int fputc(int c, FILE *fp);char *fgets(char *s, int n, FILE *fp);int fputs(const char *s, FILE *fp);int fscanf(

15、FILE *fp,const char*format, .);int fprintf(FILE *fp,const char *format,.);*24C语言独特的文件访问size_t fread(void *ptr, size_t size,size_t n,FILE *fp);size_t fwrite(const void *ptr, size_t size,size_t n, FILE *fp);int feof(FILE *fp);int fseek(FILE *fp, long offset,int whence);int fclose(FILE *fp);typedef unsigned int size_t;*25两种方式的区别open族的功能一般由OS直接提供,其使用方 式也比较具有通用性,在各种语言里基本一样fopen族的函数系包装了open族的函数,提供 更强大的功能

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号