Download presentation
Presentation is loading. Please wait.
1
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节
2
8.1 引述 文件用于对磁盘文件进行读写操作 将文件看成有序的字符或字节序列,由一个一个字符或字节数据顺序组成,称为字符流或字节流
8.1 引述 文件用于对磁盘文件进行读写操作 将文件看成有序的字符或字节序列,由一个一个字符或字节数据顺序组成,称为字符流或字节流 输入对象cin和输出对象cout实际上也是流 磁盘文件的读写操作与cin、cout的使用类似 任务8.1 从键盘输入40位学生的信息,将其存储到磁盘文件 任务8.2 从任务8.1建立的磁盘文件中读取学生信息,将其存放到结构数组并输出。 算法分析: 要解决这两个问题,主要是要解决学生信息的存储和读取问题,即如何使用C语言,将一些信息存入到一个磁盘文件中,然后从磁盘文件中读取信息并存放到数组中。为此需要用到C语言的文件这一数据类型。
3
8.2 输入输出流和文件概述 输入输出流概述 文件概述
4
8.2.1 输入输出流概述 文本流(text stream)又称文字流或字符流 文本流是一个个的字符,用换行符表示一行的结束。
文本流文件的信息直接可见 利用文本流只能读写文本文件 二进制流(binary stream) 又称字节流 二进制流则由一系列字节组成 字节流文件信息一般不能直接可见 用于对声音、图像等非文本文本进行读写 cin和cout实际上都是文本流
5
8.2.2 文件概述 文件可表示磁盘文件、键盘、显示器等所有的外部设备 C文件常被称为流式文件
流式函数将文件或数据项作为单个字符(或字节)构成的数据流来处理 流式函数在读写流式文件的数据时采用了缓冲存储区域,可以一次传输大量数据,提高了输入输出的效率 缓冲存储技术用于解决内存、外存读写速度差异很大的问题
6
8.3 文件操作 文件的打开和关闭 字符流文件的输入与输出 字节流文件的输入与输出 文件的随机访问
7
8.3.1 文件的打开和关闭 头文件fstream ifstream:输入流,用于读文件 ofstream:输出流,用于写文件
ifstream fin(filePath); //打开字符文件用于读 ifstream fin(filePath,ios::binary); //打开字节文件用于读 ofstream fout(filePath); //打开字符文件用于写 ofstream fout(filePath,ios::binary);//打开字节文件用于写 ifstream file; file.open(filePath, ios::binary); //打开字节文件用于读
8
8.3.1 文件的打开和关闭 文件打开模式 模式参数 模式含义 ios::in 读 ios::out 写 ios::app 从文件末尾开始写
ios::binary 二进制模式 ios::nocreate 打开文件时,若文件不存在,不创建 ios::noreplace 打开文件时,若文件不存在,则创建 ios::trunc 打开一个文件,然后清空内容 ios::ate 打开一个文件时,将位置移动到文件尾 参数用|(按位与)操作符进行连接 fstream file; file.open(filePath, iso::in|ios::out); // 打开字符文件用于读写
9
8.3.1 文件的打开和关闭 测试文件是否正确打开 if(!file) { // 文件打开失败 } 关闭文件 file.close();
10
8.3.2 字符流文件的输入和输出 1. 字符流文件的输出 与cout类似,使用插入运算符<< 任务8.1 算法
11
8.3.2 字符流文件的输入和输出 任务8.1 核心程序——打开文件,读入学生信息
ofstream fout(“student.txt”);// 打开字符文件用于写 if(!fout) { cout<<"文件打开失败!"<<endl; return -1; // 返回错误代码-1 } for(i = 1; i <= n; i++) // 循环输入学生信息 cout<<"请输入第"<<i<<" 位学生信息:"<<endl; stuList[i] = readStudent();
12
8.3.2 字符流文件的输入和输出 任务8.1 核心程序——学生信息写入文件
for(i = 1; i <= n; i++) // 循环将学生信息写入文件 { fout<<"姓名 "<<stuList[i].name<<endl; fout<<"学号 "<<stuList[i].no<<endl; fout<<"性别 " <<(stuList[i].sexy==1?"男":"女")<<endl; fout<<"生日 "<<stuList[i].birthday.year<<"-" <<stuList[i].birthday.month<<"-" <<stuList[i].birthday.day<<endl; fout<<"身高 "<<stuList[i].height<<endl; fout<<"体重 "<<stuList[i].weight<<endl; fout<<"电话 "<<stuList[i].telephone<<endl; fout<<"E_mail "<<stuList[i].e_mail<<endl; fout<<"QQ号 "<<stuList[i].qq<<endl; } fout.close(); // 关闭文件
13
8.3.2 字符流文件的输入和输出 1. 字符流文件的输出 生成的文本文件示例
14
8.4 流的格式化输出 格式控制函数 行内格式的控制
15
8.5 程序举例 存储课程信息 读取课程信息
Similar presentations