第13章 文 件.

Slides:



Advertisements
Similar presentations
电子成绩单项目实现.
Advertisements

雷 霆 战 机 By—谷恩轩&余万全.
第 5 章 文件I/O操作.
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
第十三章 文件.
複習 struct score_Type{ int chinese,english; }; struct my_Type{
第4章 串 串的基本概念和C语言的串函数 串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 主要知识点.
C语言程序设计 第十二章 位运算.
C File System.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
计算概论 第二十一讲 文件操作 北京大学信息学院.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
If … else 選擇結構 P27.
Chap 9 结构 9.1 构建手机通讯录 9.2 结构变量 9.3 结构数组 9.4 结构指针.
第10章 文件操作.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
程序讲解 第一题: 将指定文件的m行到n行字符写到显示屏上,m和n值从键盘输入。 运行时输入及结果: please enter m,n:
第10章 文件.
STRUCTURE 授課:ANT 日期:2010/5/12.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
第10章 文件操作.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
C 語言簡介 - 2.
C语言程序设计 李祥.
11.1 文件的基本概念 11.2 文件的打开与关闭 11.3 文件的顺序读写 11.4 文件的随机读写 11.5 文件检测
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
函数申明、定义、调用 申明: void sort(float a[], int n); void sort(float *a, int m); void sort(float *a, int); void sort(float *, int);
第十二章 文件 12.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
fp=fopen("CD2.dat","wb"); fwrite(&min,8,1,fp); fclose(fp);
第4章 MATLAB文件操作 4.1 文件的打开与关闭 4.2 文件的读写操作 4.3 数据文件定位.
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
程式設計 博碩文化出版發行.
第九章 文件 程序数据标准输入输出设备 程序数据文件 数据流和文件 文件的打开和关闭 文件读写函数.
File(檔案處理) 學習目標:開檔、讀檔、更新檔與關閉檔案.
THE C PROGRAMMING LANGUAGE
第10章 文件操作.
第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
第5章 文件.
第9章 文件操作 文件 使用文件的目的 操作系统管理数据的基本单位 存储在外存储器上的数据的集合
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
研讨课4 文件操作.
第十三章 文件.
PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理.
一、文件的基本概念 第十三章 文 件 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
C语言概述 第一章.
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
第3章 變數、算術運算、 數學函數及輸入輸出.
實習十 開讀檔練習.
C標準輸出入函數庫 與 作業系統.
第十一章 文件 11.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
本节内容 文件读写 视频提供:昆山爱达人信息技术有限公司.
第二章 类型、对象、运算符和表达式.
本节内容 访问模式 视频提供:昆山爱达人信息技术有限公司.
函数申明、定义、调用 申明: void sort(float a[], int n); void sort(float *a, int m); void sort(float *a, int); void sort(float *, int);
第十一章 文件 11.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
結構、檔案處理(Structure, File)
第十二章 位运算.
第七章 文件 7.1 文件的基本概念 7.2 文件类型指针 7.3 文件的打开与关闭 7.4 文件的读/写 7.5 文件的随机读/写
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab2.
C语言程序设计 第13章 文件操作.
Q6. 某學校將學生的電話號碼存貯在一個文字檔'telist.txt'。 在這交字檔中,每行有14個字符,代表學生班別、班號和電話號碼,
安排座位.
Presentation transcript:

第13章 文 件

本 章 内 容 C文件概述 文件类型指针 文件的打开和关闭 文件的读写 文件的定位 出错的检测

13.1 C文件概述 文件 文件是存储在外部介质上的数据的集合。 操作系统是以文件为单位对数据进行管理的。 输出文件缓冲区 程序 文件 数据区 输出文件缓冲区 输入文件缓冲区

13.1 C文件概述 文件类型 从用户观点 特殊文件(标准输入输出文件或标准设备文件)。 普通文件(磁盘文件)。 从操作系统的角度 每一个与主机相连的输入输出设备看作是一个文件。 例如:输入文件:终端键盘,输出文件:显示屏和打印机。 从数据的组织形式 ASCII文件(文本文件) 每一个字节放一个ASCII代码。 便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转换时间。 二进制文件 把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。 可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。

13.1 C文件概述 ANSI C标准用缓冲文件系统来处理文本文件和二进制文件。 C语言中对文件的操作是用库函数来实现的。 系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。 用缓冲文件系统进行的输入输出又称为高级磁盘输入输出。 非缓冲文件系统 系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。 用非缓冲文件系统进行的输入输出又称为低级输入输出系统。 ANSI C标准用缓冲文件系统来处理文本文件和二进制文件。 C语言中对文件的操作是用库函数来实现的。

13.2 文件类型指针 结构体文件类型FILE typedef struct { shortlevel; /*缓冲区"满"或"空"的程度*/ unsignedflags; /*文件状态标志*/ charfd; /*文件描述符*/ unsignedcharhold; /*如无缓冲区不读取字符*/ shortbsize; /*缓冲区的大小*/ unsignedchar*buffer; /*数据缓冲区的位置*/ unsignedar*curp; /*指针,当前的指向*/ unsignedistemp; /*临时文件,指示器*/ shorttoken; /*用于有效性检查*/ }FILE;

13.2 文件类型指针 在缓冲文件系统中, 每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息(名字、状态、当前位置等),这些信息存放在一个结构体变量中。 FILE类型的数组 FILE f[5]; 文件型指针变量 FILE *fp;

13.3 文件的打开和关闭 文件的打开(fopen()函数) 调用方式: FILE *fp; fp=fopen(文件名,使用文件方式); 使用文件方式: r,w,a,+,b 函数的返回值: 正常打开则返回文件指针。 出错则返回0(NULL)。 文件的关闭(fclose()函数) 调用形式: fclose(文件指针); 正常关闭则返回0值。 否则返回EOF。

13.3 文件的打开和关闭 符号 方式 含义 "r" 只读 为输入打开一个文本文件 "w" 只写 为输出打开一个文本文件 符号 方式    含义 "r" 只读 为输入打开一个文本文件 "w" 只写 为输出打开一个文本文件 "a" 追加 向文本文件尾增加数据 "rb" 只读 为输入打开一个二进制文件 "wb" 只写 为输出打开一个二进制文件 "ab" 追加 向二进制文件尾增加数据 "r+" 读写 为读/写打开一个文本文件 "w+" 读写 为读/写建立一个新的文本文件 "a+" 读写 为读/写打开一个文本文件 "rb+" 读写 为读/写打开一个二进制文件 "wb+" 读写 为读/写建立一个新的二进制文件 "ab+" 读写 为读/写打开一个二进制文件

13.3 文件的打开和关闭 几个相关的函数和符号常量 函数exit(0) 关闭所有文件 符号常量NULL 空值(0) 符号常量EOF 文件结束符(-1) 函数feof(文件指针)判断文件结束否(非0结束)

13.4 文件的读写 fputc函数和fgetc函数 将一个字符写到磁盘文件中 调用形式: fputc(ch,fp); 输出成功返回该字符,失败返回EOF。 从指定文件读入一个字符 ch=fgetc(fp); 输出成功返回得到的字符,失败返回EOF。 使用举例 P336~337: 例13.1,例13.2

13.4 文件的读写 常见的读取字符操作 从一个二进制文件顺序读入字符: while(!feof(fp)) { ch = fgetc(fp); } 注意事项 ANSI C提供一个feof()函数来判断文件是否真的结束。 如果是文件结束,函数feof(fp)的值为1(真);否则为0(假)。 也适用于文本文件的读取。

13.4 文件的读写 fread函数和函数fwrite 一次读写一组数据(一个实数或一个结构体变量的值)。 调用形式 fread(buffer,size,count,fp); fwrite (buffer,size,count,fp); 参数说明: fp:文件型指针 count:读写多少个size字节 size:要读写的字节数 buffer:指针,读入(输出)数据的存放地址 使用举例 若文件以二进制形式打开: fread(f,4,2,fp); 功能:此函数从fp所指向的文件中读入2个4个字节的数据,存储到数组f中。

13.4 文件的读写 若有如下结构类型: struct student_type { char name[10]; int num; int age; char addr[30]; }stud[40]; 可以用fread和fwrite来进行数据的操作: for(i=0; i<40; i++) fread(&stud[i],sizeof(struct student-type),1,fp); fwrite(&stud[i],sizeof(struct student-type),1,fp);

13.4 文件的读写 例13.3:从键盘输入4个学生的有关数据,然后把它们转存到磁盘文件上去。 #include <stdio.h> #define SIZE 4 struct student_type { char name[10]; int num; int age; char addr[15]; }stud[SIZE];

13.4 文件的读写 void save( ) { FILE *fp; int i; if((fp=fopen("stu-list","wb"))==NULL) printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1) printf("file write error\n"); fclose(fp);

13.4 文件的读写 main() { int i; for(i=0;i<SIZE;i++) scanf("%s%d%d%s", stud[i].name, &stud[i].num, &stud[i].age,stud[i].addr); save( ); }

13.4 文件的读写 从"stu_list"文件中读入数据,然后在屏幕上输出。 main( ) { int i; FILE *fp; fp=fopen("stu-list","rb"); for(i=0; i<SIZE; i++) fread(&stud[i],sizeof(struct student_type),1,fp); printf("%\-10s %4d %4d %\-15s\n", stud[i].name, stud[i].num,stud[i]. age, stud[i].addr); } fclose (fp);

13.4 文件的读写 fprintf函数和fscanf函数 对磁盘文件进行格式化读写。 调用形式: 例如: fprintf(fp,"%d,%6.2f",i,t); fscanf (fp,"%d,%f",&i,&t); 注意事项 由于在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。 因此,在内存与磁盘频繁交换数据的情况下,最好不用fprintf和fscanf函数,而用fread和fwrite函数。

13.4 文件的读写 其他读写函数 字 "字"由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长。 例如一台8位机,它的1个字就等于1个字节,字长为8位;如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。 字是计算机进行数据处理和运算的单位。

13.4 文件的读写 putw函数 功能:将一个字(整数)写到fp指向的文件中。 调用形式: putw(整数,fp); 返回值为输出的整数,出错则返回EOF。 putw函数定义: putw(int i,FILE *fp) { char *s; s=&i; putc(s[0],fp); /* s[0]为i的第1字节*/ putc(s[1],fp); return i; }

13.4 文件的读写 getw函数 功能:从fp所指向的文件读取下一个字。 调用形式: i=getw(fp); 返回值为输入的整数,出错则返回EOF。 getw函数定义: getw(FILE *fp) { char *s; int i; s=char *&i; s[0] = getc(fp); s[1] = getc(fp); return i; }

13.4 文件的读写 fgets函数 fgets(字符数组,字符个数,文件指针); 功能:从指定文件读入一个字符串。 返回字符数组的首地址。 例如: fgets(str, n, fp); 从fp指向的文件输入n-1个字符,在最后加一个'\0'。 返回值:str的首地址。 fputs函数 fputs(字符串,文件指针); 功能:向指定文件输出一个字符串,'\0'不输出。 "字符串":字符串常量、字符数组名或字符型指针。 输出成功函数值为0,失败为EOF。 fgets("China", fp);

13.5 文件的定位 rewind函数 作用:使位置指针重新返回文件开头。 调用形式:rewind(文件类型指针); 无返回值。 fseek函数和随机读写 顺序读写:指只能按字节顺序读写文件中的字节。 随机读写:指可以读写文件中任意位置上所需要的字节。 调用形式(位移量为long型数据): fseek(文件类型指针,位移量,起始点); 返回值:成功为当前位置,否则返回-1。 起始点 名字 用数字代表 文件开始 SEEK_SET 文件当前位置 SEEK_CUR 1 文件末尾 SEEK_END 2

13.5 文件的定位 例13.5:在磁盘文件上存有10个学生的数据。要求将第1、3、5、7、9个学生数据输入计算机,并在屏幕上显示出来。 struct student_type { int num; int age; } stud[10]; void main() int I, FILE *fp; if((fp=fopen("stud_dat", "rb"))==NULL) exit(0); for(i=0; i<10; i+=2) fseek(fp, i*sizeof(struct student_type), 0); fread(&stud[i], sizeof(struct_student_type), 1, fp); printf("%d %d \n", stud[i].num, stud[i].age); }

13.5 文件的定位 ftell函数 作用:得到流式文件当前位置,用相对于文件开头的位移量来表示。 调用形式: ftell(文件类型指针); 例如: long i; i = ftell(fp); if(i == -1L) printf("error\n");

13.6 出错的检测 ferror函数 作用:检查输入输出函数调用中的错误。在执行fopen函数时,ferror函数的初始值自动置为0。 调用形式: ferror(文件类型指针); 返回值:为0表示未出错,非0表示出错。 对同一个文件每一次调用输入输出函数,均产生一个新的ferror函数值。应即时检查。 clearerr函数 作用:使文件错误标志和文件结束标志置为0。 调用形式: clearerr(文件类型指针); 返回值:无。

作 业 P348 13.4 13.6