【经管类】文件概念与文件类型指针

上传人:Jerm****014 文档编号:56219618 上传时间:2018-10-10 格式:PPT 页数:43 大小:715KB
返回 下载 相关 举报
【经管类】文件概念与文件类型指针_第1页
第1页 / 共43页
【经管类】文件概念与文件类型指针_第2页
第2页 / 共43页
【经管类】文件概念与文件类型指针_第3页
第3页 / 共43页
【经管类】文件概念与文件类型指针_第4页
第4页 / 共43页
【经管类】文件概念与文件类型指针_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《【经管类】文件概念与文件类型指针》由会员分享,可在线阅读,更多相关《【经管类】文件概念与文件类型指针(43页珍藏版)》请在金锄头文库上搜索。

1、第八章 文件,8.1 文件概念与文件类型指针 8.2 C语言中文件的打开与关闭 8.3 C语言中的文件读写 8.4 C语言中文件的定位和随机读写 8.5 C语言中文件操作错误检测,8.1 文件概念与文件类型指针,文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。 文件分类: 按文件的读写方式分类 : 顺序文件 。 随机文件 。 按存储介质: 磁盘文件:存储介质文件(磁盘、磁带等)。 设备文件:非存储介质(键盘、显示器、打印机等)。,按文件的结构形式分类 : ASCII文件(文本文件):每个字节存放ASCII码,表示一个字符。 二进制文件:数据按其在内存中的存储形式原样存放。,文件类型

2、指针: 文件类型结构体FILE 缓冲文件系统为每个正使用的文件在内存开辟文件信息区。 文件信息用系统定义的名为FILE的结构体描述。 FILE定义在stdio.h中。,typedef struct /* Turbo C 文件类型声明 */ short level; /* 缓冲区满/空程度 */ unsigned flags; /* 文件状态标志 */ char fd; /* 文件描述符 */ unsigned char hold; /* 若无缓冲区不读取字符 */ short bsize; /* 缓冲区大小 */ unsigned char *buffer; /* 数据传送缓冲区位置 */ u

3、nsigned char *curp; /* 当前读写位置 */ unsigned istemp; /* 临时文件指示 */ short token; /* 用作无效检测 */ FILE ; /* 结构体类型名 FILE */,文件指针定义形式 FILE *文件结构指针名;File * fp; 用法: 文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件。 文件关闭后,它的文件结构体被释放。,8.2 C语言中文件的打开与关闭,系统自动打开和关闭的五个标准设备文件:,打开文件fopen 函数首部: FILE *fopen(char *filename

4、,char *mode) 功能:按指定方式打开文件。 返值:正常打开,为指向文件结构体的指针;打开失败,为NULL。,要打开的文件名,使用文件方式,例:文件打开与测试。 FILE *fp; if( fp=fopen(“filename”,“rb+”)=NULL) printf(“cannot open this filen”); exit(0); ,例 FILE *fp; fp= fopen (“c:test”,”rb+”);,文件关闭,函数:int fclose(FILE *fp) 功能:关闭fp指向的文件,释放文件结构体和文件指针。 返值:正常为0;出错为非0。,不关闭文件可能会丢失数据,

5、8.3 C语言中的文件读写,字符输出fputc 函数原型:int fputc(int ch, FILE *fp) 功能:把一字符ch写入fp指向的文件中。 返值:正常,返回ch;出错,为EOF。 字符输入fgetc 函数原型:int fgetc(FILE *fp) 功能:从fp指向的文件中读取一个字符。 返值:正常,返回读取的字符;读到文件尾或出错时,为EOF。,例8-1 读入文件ex8-1.cpp并在屏幕上显示出来。 算法描述: 定义文件指针fp。 以读文本文件方式打开文件“ex8-1.cpp”, 并使fp指向该文件。如打开文件出错, 给出提示并退出程序。 从文件中读入一个字符 While(

6、读取的字符!=文件结束标志) 将读取的字符显示在屏幕上 从文件中读入下一字符。 关闭文件。 根据分析写出程序代码如下:,#include #include void main() FILE *fp; char ch; if(fp=fopen(“ex8-1.cpp“,“r“)=NULL) printf(“Cnat open file ex8-1.cpp!n“); exit(0); ch=fgetc(fp);/*从文件中读取一个字符*/ while(ch!=EOF) /*判断是否为文件结尾*/ putchar(ch); /*使用putchar()函数在屏幕上显示字符*/ ch=fgetc(fp);

7、 /*继续从文件中读取一个字符*/ fclose(fp); /*使用fclose()函数关闭文件*/ ,例8-2将从键盘上输入的字符存入文本文件mydata,当遇到输入字符为#时输入流结束,然后将该文件内容读出显示在屏幕上。 算法思想: (1)定义FILE类型指针fp。 (2)按“w”方式打开文件mydata,fp与mydata文件建立联系,如果打开文件出错,提示错误信息,退出程序运行。 (3)用do while循环处理键入字符,将字符写入文件mydata,直到遇到符号#为止。 (4)关闭文件, (5)以只读的方式打开文件。 (6)用while循环处理读出字符并判断是不是文件结束标志(每个文件

8、末有一结束标志EOF),如果不是文件结束标志就把该字符显示在屏幕上,再读入下一字符。 (7)关闭文件。,#include #include void main() FILE *fp; char ch; if(fp=fopen(“mydata”,”w”)=NULL) printf(“Cant create file mydata!n”); exit(0); printf(“input a string:n“); do ch=getchar();/*从键盘输入一个字符*/ fputc(ch,fp); /*将字符写入文件test.txt*/ while(ch!=EOF); /*判断键盘输入是否结束*

9、/ fclose(fp);/*关闭文件*/ fp=fopen(“mydata”,”r”);/*用“r”方式打开mydata文件*/ ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(“n“); fclose(fp); ,函数putw 功能:将整型变量的值输出到fp关联的文件中 函数getw(fp) 功能:从fp关联的文件中读出一个整数。 字符串输出函数fputs 函数原型: int fputs(string,fpt) 功能:将string所代表的字符串(指向字符串的指针、字符数组或字符串常量)写入文件指针fpt关联的文

10、件。 返回值:函数fputs正常执行时返回写入文件中的字符个数,函数执行出错时返回值为EOF(-1)。,字符串输入 fgets 函数: char *fgets(char *str,int n,FILE *fp); 功能:从文件指针fpt关联的文件中读取n-1个字符,并将它们存放到str所代表的字符串对象中去。如果在读入n-1个字符前遇到换行符n或文件结束符EOF,将遇到的换行符作为一个字符处理,然后在读入的字符串末尾自动加上一个字符串结尾符0 . 返回值:正常,返str指针;出错,返空指针NULL。,例8-4 向文件myfile.txt中写入6个长度不大于10的字符串。 算法描述: (1)定义

11、FILE类型指针fp。 (2)按“w”方式打开文件myfile.txt,fp与myfile.txt文件建立联系,如果打开文件出错,提示错误信息,退出程序运行。 (3)用for循环循环6次输入6个字符串,为了区分存入文件的字符串,每个字符串输入后用函数调用fputc(n,fp)插入一个换行符。 (4)关闭文件。,程序代码: #include “stdio.h“ #include“stdlib.h“ void main() FILE * fp; int i; char s10; if(fp=fopen(“myfile.txt“,“w“)=NULL) printf(“error“); exit(0)

12、; printf(“enter string:n“); for(i=1;i=4;i+) scanf(“%s“,s); fputs(s,fp); fputc(n,fp); fclose(fp); ,例8-5从键盘输入一个字符串,将其中的小写字母全部换成大写字母写入文件“abc.txt”中保存,输入字符串以“#”结束。然后将文件“abc.txt”中内容显示在屏幕上。 #include “stdio.h” #include “stdlib.h” #include “string.h” void main() FILE *fp; char str80; int i=0; if(fp=fopen(“ab

13、c.txt”,”w”)=NULL) printf(“cant open filen”); exit(0); ,printf(“Enter a string:n”); gets(str); while(stri!=#) if(stri=a ,格式化输入函数fscanf 功能:以ASCII码值的方式从fpt关联的文件中读取数据,按格式控制字符串中指定的数据格式转换后送到由输入地址列表中相应项指定的内存单元。 格式化输出函数fprintf 功能:将输出表达式列表的各项由对应格式说明符的格式转换为相应的ASCII码输出到fpt关联的文件中。,数据块输出函数fwrite 函数的调用形式: fwrite(

14、buffer,size,count,fpt); 式中: burrer为输出数据在内存中的起始地址; size为要输出的字节数; count指定一次操作输出多少个size字节的数据项; fpt与被操作的文件相关联的文件指针; 功能:从以buffer为首地址的内存中取出count次size长度(共count*size字节)输出到fpt关联的文件中。函数正常操作时返回值为输出的项数,出错时返回值为-1。,数据块输入函数fread 函数调用的形式: fread(buffer,size,count,fpt); 式中: buffer为读入数据在内存中的起始地址; size为要读取的字节数; count指定

15、一次操作读取多少个size字节的数据项; fpt指向被操作的文件的指针; 功能:在由fpt关联的文件中读取count次size长度(总共count*size字节)存放到由buffer指定的内存区域中。函数正常操作时返回值为读取的项数,出错时返回值为-1。,例8-6编写程序实现将n(n100)个职工的数据信息写入到文件emp中,每个职工的数据包括:职工号,姓名,性别,年龄,工资。 算法描述: 定义职工的结构体类型包含职工号,姓名,性别,年龄,工资信息; 定义文件指针fp; If(打开文件emp出错) 给出出错信息; 退出程序运行; 输入整数n; 循环n次输入n个职工的信息存入结构体数据元素中;

16、循环n次将结构体中数组元素依次用fwrite函数输出到fp所关联的文件emp中; 关闭fp; 根据算法描述编写程序代码:,#include #include “stdlib.h“ #define num 100 static struct employee char no5; char name10; char sex3 ; int age; int salar; empnum; void main() FILE *fp; int n,i; char inbuf20; if(fp=fopen(“emp“,“wb“)=NULL) printf(“cant create file empn“); exit(0);,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 企业文档

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