C语言程序设计 第13章 文件操作.

Slides:



Advertisements
Similar presentations
北京师范大学生命科学学院 北京师范大学生命科学学院 余跃强 章腾勋 王航 余跃强 章腾勋 王航 2 目 录目 录目 录目 录  前言 前言  概述 概述  形态和生活史 形态和生活史  寄生适应特征 寄生适应特征  致病机制与症状 致病机制与症状  诊断 诊断  流行情况 流行情况.
Advertisements

计算机组成原理.
2011年度十佳、先进员工 旅游活动(二) 九鲤溪与太姥山游记.
基本概論 Basic concepts.
高职人才培养评估核查 与状态数据采集平台建设工作 说 明 广东水利电力职业技术学院 曾志军
C语言程序设计 主讲教师 :张群燕 电话:
劳动社会保障法学 吴 斌 四川理工学院 法学教授.
正修科技大學典範人物專訪 寫作徵文比賽實施要點
第一章 C语言概述 计算机公共教学部.
树立正确的消费观 问题探究1 问题探究2 问题探究3 课堂活动 课堂小结 课后探究 普通高中课程标准实验教科书
提示语、广告词 颁奖词、衔接语 感谢信、通告启事 图文转换
補充: Input from a text file
温 馨 提 示 感谢您从“河姆渡教师教育网”下载使用该PPT文件,仅供学习参考,未经作者同意勿在公开场合使用,谢谢合作!
雷 霆 战 机 By—谷恩轩&余万全.
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
第十三章 文件.
複習 struct score_Type{ int chinese,english; }; struct my_Type{
C语言程序设计 第十二章 位运算.
C File System.
第一章 C语言概述.
计算概论 第二十一讲 文件操作 北京大学信息学院.
计算机文化基础 第一章 计算机的基础知识.
作 業 系 統 第三組 楊育翰 顏瑞霖.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
第七章. 文件系统 (lab5).
第10章 文件操作.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
第10章 文件操作.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
11.1 文件的基本概念 11.2 文件的打开与关闭 11.3 文件的顺序读写 11.4 文件的随机读写 11.5 文件检测
第十二章 文件 12.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
fp=fopen("CD2.dat","wb"); fwrite(&min,8,1,fp); fclose(fp);
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
程式設計 博碩文化出版發行.
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
第九章 文件 程序数据标准输入输出设备 程序数据文件 数据流和文件 文件的打开和关闭 文件读写函数.
File(檔案處理) 學習目標:開檔、讀檔、更新檔與關閉檔案.
THE C PROGRAMMING LANGUAGE
第10章 文件操作.
第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫
ACM程序员大赛讲座 _____C语言程序设计要点 讲授人:王敬华.
Linux 文件操作——系统调用和标准 IO 库
第5章 文件.
第9章 文件操作 文件 使用文件的目的 操作系统管理数据的基本单位 存储在外存储器上的数据的集合
研讨课4 文件操作.
PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
大綱 *專題演講介紹 *大陸醫療的改革與發展 *海報發表文章分享 2012海峽兩岸醫院院長論壇行後報告 ‧台北
一、文件的基本概念 第十三章 文 件 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
第3章 變數、算術運算、 數學函數及輸入輸出.
第1章 绪论 北京师范大学 教育技术学院 杨开城.
C语言程序示例: 1.输入10个数,按从小到大的顺序排序。 2.汉诺塔问题。.
本节内容 字节对齐.
保留字與識別字.
實習十 開讀檔練習.
C標準輸出入函數庫 與 作業系統.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
File Input and Output Chap. 11: 施威銘的書 Chap. 7: K&R.
本节内容 文件读写 视频提供:昆山爱达人信息技术有限公司.
静定结构位移计算 ——互等定理 主讲教师:戴萍.
第二章 类型、对象、运算符和表达式.
第二章 基本数据类型 ——数据的表示.
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
第13章 文 件.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
实验二:添加Linux系统调用及熟悉常见系统调用
結構、檔案處理(Structure, File)
第十二章 位运算.
第七章 文件 7.1 文件的基本概念 7.2 文件类型指针 7.3 文件的打开与关闭 7.4 文件的读/写 7.5 文件的随机读/写
Presentation transcript:

C语言程序设计 第13章 文件操作

本章学习内容  二进制文件和文本文件  文件的打开和关闭  文件的顺序读写与随机读写  标准输入输出及其重定向

Von J. Neumann Architecture 记忆装置(Memory) Where to put data in computer? How to input or output data? 输入/输出 设备 存储器 运算器 控制器 程序 和输入数据 输出结果 取出数据 存入数据 操作命令 存取命令 取出 程序指令 输入输出命令 计算结果 CPU 眼睛和耳朵(I/O devices) 大脑

I/O设备 输入设备 输出设备 单纯的输入设备或者单纯的输出设备越来越少 键盘、鼠标 软盘、硬盘、光驱(以文件的形式) 扫描仪、视频采集卡、电视卡、游戏杆、话筒 …… 输出设备 显示器、打印机 软盘、硬盘、 CD/DVD-RW (以文件的形式) 音箱 单纯的输入设备或者单纯的输出设备越来越少 键盘上的指示灯其实是计算机的输出。鼠标也开始有反馈功能了。显示器出现了触摸屏……

标准输入/输出 字符界面的操作系统一般都提供标准输入与输出设备 一般情况,标准输入就是键盘,标准输出就是终端显示器 DOS、Linux、UNIX… 一般情况,标准输入就是键盘,标准输出就是终端显示器 操作系统有能力重定向标准输入与输出,比如让文件作为标准输入(标准输出) 这种重定向程序本身是感觉不到的 自来水厂

DOS下的标准输入/输出重定向 程序prog如下 输入重定向 输出重定向 main() { char c; while ((c=getchar()) != '\n') putchar(++c); } 输入重定向 prog < infile.txt 输出重定向 prog > outfile.txt

流(Stream) 计算机中的流的概念 流的载体? 一般称为数据流,也叫做字节流、比特流 可以倒流的数据流 不会倒流的数据流也很多 File stream(文件流), Video stream(视频流) and Audio stream(音频流)in specific field. 可以倒流的数据流 如果你想重新读已经读过的数据,或者要修改已经写入的数据,可以发出流控(Flow Control)命令 不会倒流的数据流也很多 网络上的数据流。网络和数据线等介质只有很小的数据缓冲区,没有大量存储的能力 流的载体? 磁盘文件、终端显示器或打印机、存储器等

外存 内存容易健忘,所以数据必须保存在“不健忘”的外存上 容量大、断电后数据不丢失,可重复使用,永久保存 磁盘(Magnetic Disks) 光盘(CD、DVD) U盘(Flash Memory)...... 容量大、断电后数据不丢失,可重复使用,永久保存 一般都以文件的形式给用户及应用程序使用

文件(File) 文件 程序中的文件 一般指存储在外部介质上有名字的一组相关数据的集合 用文件可长期保存数据,实现数据共享 在C语言中,文件可泛指磁盘文件、终端显示器或打印机…… 程序中的文件 在程序运行时由程序在磁盘上建立一个文件,通过写操作将数据存入该文件 由程序打开磁盘上的某个已有文件,并通过读操作将文件中的数据读入内存供程序使用

文件(Files)与流 (Streams) 程序通过文件打开操作把流与设备联系起来,文件打开后,可在程序和文件之间交换数据 程序通过文件关闭操作断开流与文件的联系 所有流的性质都一样 因为流与设备无关,所以能写入磁盘文件的同一函数也能写入另一设备,如控制台终端等 文件的能力则不同 如磁盘文件支持随机存取,而键盘则不能

文件的存放(Storage) 可以建立若干文件目录(directory\folder文件夹) 在目录里保存文件 同一级目录里保存的文件不能同名 对使用者而言,只要知道文件的路径(path, 全目录)和文件名,就能使用该文件 C:\home\Sunner\main.c 这都是托OS的福

13.1二进制文件和文本文件 文件的类型(Type of Files)? 二进制文件 是一种字节序列,没有字符变换 按照数据在内存中的存储形式(二进制)存储到文件 如整数123,在内存占2个字节,则文件中也占2个字节 文本文件/ASCII码文件 是一种字符序列,文件中存储每个字符的ASCII码 如整数123在文件中占3个字节,分别存放这3个字符的ASCII码 如果存1234呢?

文件的格式(Format of Files) 数据必须按照存入的类型读出,才能恢复其本来面貌 公开的标准格式 如bmp、tif、gif、jpg和mp3等类型的文件,有大量软件能生成和使用这些类型的文件 不公开或加密的文件格式 如Microsoft Word的doc格式就不公开,所以至今没有Word以外的其他软件能完美地读出doc文件

缓冲型和非缓冲型文件系统 缓冲型文件系统 非缓冲型文件系统 指系统自动在内存中为每一个正在使用的文件开辟一个缓冲区,在读写文件时,数据先送到缓冲区,再传给C程序或外存上 缓冲文型件系统利用文件指针标识文件 缓冲型文件系统中的文件操作,也称高级文件操作 高级文件操作函数是ANSI C定义的文件操作函数,具有跨平台和可移植的能力 非缓冲型文件系统 不会自动设置文件缓冲区,缓冲区需由程序员自己设定 非缓冲型文件系统没有文件指针,它使用称为文件号的整数来标识文件

13.2文件的打开和关闭 下面介绍的函数均定义在<stdio.h>中 FILE *fopen(const char *filename, const char *mode); FILE *fp = fopen("C:\\CONFIG.SYS", "rw"); filename是文件名 包含路径。如果不含路径,表示打开当前目录下的文件 mode是打开方式 常用为"r"、"w"、"rw"和"a",分别表示只读、只写、读写和添加 "rb"表示只读二进制文件 返回值为指向此文件的指针,留待以后使用 如果打开失败,返回值为NULL

文件打开方式(mode): 对应文本文件 “r” 只读 必须是已存在的文件 “w” 只写 不论该文件是否存在,都新建一个文件 “a” 追加 向文本文件尾增加数据,该文件必须存在 “r+” 读写 打开一个已存在的文件,用于读写 “w+” 读写 建立一个新文件,可读可写 “a+” 读写 向文件尾追加数据,也可读 “rb” “wb” “ab” “rb+” “wb+” “ab+” 对应二进制文件

文件指针(File Pointer) FILE *fp ; 是FILE型指针变量,标识一个特定的磁盘文件 typedef struct { short level; /*缓冲区‘满’或‘空’的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer;/*数据缓冲区的位置*/ unsigned char *curp; /*指针当前的指向*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/ }FILE; /*在stdio.h文件中定义*/

13.2文件的打开和关闭 int fclose(FILE *fp); fclose函数的返回值 把遗留在缓冲区中的数据写入文件,实施操作系统级的关闭操作 同时,释放与流联系的文件控制块,以后可以重复使用这部分空间 多数情况下,系统限制同时处于打开状态的文件总数,因此,打开文件前先关闭无用文件是必要的 fclose函数的返回值 当顺利地执行了关闭操作,返回值为0 如果返回值为非零值,表示关闭时有错误 一般只有驱动器中无盘或盘空间不够时才失败,关闭失败会引起数据丢失、文件的破坏和程序中的随机错误

13.3按字符读写文件 字符读写 int fgetc(FILE *fp); 从fp读出一个字符,将位置指针指向下一个字符 若读成功,则返回该字符,若读到文件尾,则返回EOF(EOF是一个符号常量,在stdio.h中定义为-1) int fputc(int c, FILE *fp); 向fp输出字符c 若写入错误,则返回EOF,否则返回c

13.3按字符读写文件 【例13.1】从键盘输入一串字符,转存到磁盘文件上 为什么要判断文件打开是否成功呢?

【例13.2】 函数feof()检查是否到达文件尾,当文件位置指针指向文件尾时,返回非0值,否则返回0值 将0~127之间的ASCII字符写到文件中,然后从文件中读出并显示到屏幕上 函数feof()检查是否到达文件尾,当文件位置指针指向文件尾时,返回非0值,否则返回0值

【例13.3】 修改例13.2,从文件中读出字符时,判断是否为可打印字符,若是则显示该字符,否则显示其十进制ASCII码值

为什么在输出第128个字符的ASCII码值后又输出了一个-1呢? 【例13.3】 修改例13.2,从文件中读出字符时,判断是否为可打印字符,若是则显示该字符,否则显示其十进制ASCII码值

为什么在输出第128个字符的ASCII码值后又输出了一个-1呢? 【例13.3】 修改例13.2,从文件中读出字符时,判断是否为可打印字符,若是则显示该字符,否则显示其十进制ASCII码值 if (!iscntrl(ch)) 使用函数feof()时,仅当读到文件结束符时才能判断出到达文件尾,而文件结束符是一个值为-1的不可打印的控制字符

13.3按字符读写文件 字符串读写 char *fgets(char *s,int n,FILE *fp); 从fp所指的文件中读取字符串并在字符串末尾添加'\0',然后存入s,最多读n-1个字符 当读到回车换行符、文件末尾或读满n-1个字符时,函数返回该字符串的首地址 特例:fgets(buf, sizeof(buf), stdin); int fputs(const char *s, FILE *fp); 将字符串写入文件中 若出现写入错误,则返回 EOF,否则返回一个非负数

13.3按字符读写文件 【例13.4】用fgets()改写例13.1程序,从键盘输入一串字符,添加到文本文件demo.txt的末尾。假设文本文件demo.txt中已有内容为:I am a student.

13.4按格式读写文件 格式化读写 int fscanf(FILE *fp,const char *format,...); fscanf(fp, "%d,%6.2f", &i, &t); 第1个参数为文件指针,第2 个参数为格式控制参数,第3 个参数为地址参数表列 int fprintf(FILE *fp,const char *format,...); fprintf(fp, "%d,%6.2f", i, t); 第1个参数为文件指针,第2 个参数为格式控制参数,第3 个参数为输出参数表列

【例13.5】修改例12.7程序,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件score.txt中 将平均分作为STUDENT结构体的成员,使函数的接口更简洁

【例13.5】修改例12.7程序,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件score.txt中

【例13.5】修改例12.7程序,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件score.txt中

【例13.5】修改例12.7程序,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件score.txt中

【例13.6】在例13.5基础上, 从文件score.txt中读出每个学生的4门课的平均分,各科成绩及平均分

【例13.6】在例13.5基础上, 从文件score.txt中读出每个学生的4门课的平均分,各科成绩及平均分

13.5按数据块读写文件 按数据块读写 从fp所指的文件中读取数据块并存储到buffer指向的内存中 buffer是待读入数块据的起始地址 size是每个数据块的大小(待读入的每个数据块的字节数) count是最多允许读取的数据块个数(每个数据块size个字节) 返回实际读到的数据块个数 将buffer指向的内存中的数据块写入fp所指的文件

【例13. 7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student 【例13.7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上

【例13. 7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student 【例13.7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上

【例13. 7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student 【例13.7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上

【例13. 7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student 【例13.7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上

【例13. 7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student 【例13.7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上

【例13. 7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student 【例13.7】在前几个实例基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上

作业 习题 13.1 ~ 13.5 实验题 本章实验题 :学生成绩管理系统v6.0

Questions and answers