210 likes | 364 Views
第六章. 文件操作和异常. 回顾. 输出流 插入操作符 输出操纵符 输入流 提取操作符 输入操纵符. 目标. 文件输入 文件输出 异常处理. 文件输入 / 输出. 从文件读取和写入文件的过程 需要添加头文件 fstream.h 两个基本类 ifstream 读取文件 ofstream 写入文件. 文件输出 3-1. 流是一组字符或数据流的源或目的 两种流 输出流(允许写入或存储字符) 输入流(允许读取或提取字符) 输出流与 ostream 类相关联. 文件输出 3-2. ios 类是流类层次结构的虚拟基类
E N D
第六章 文件操作和异常
回顾 • 输出流 • 插入操作符 • 输出操纵符 • 输入流 • 提取操作符 • 输入操纵符
目标 • 文件输入 • 文件输出 • 异常处理
文件输入/输出 • 从文件读取和写入文件的过程 • 需要添加头文件 fstream.h • 两个基本类 • ifstream 读取文件 • ofstream 写入文件
文件输出 3-1 • 流是一组字符或数据流的源或目的 • 两种流 • 输出流(允许写入或存储字符) • 输入流(允许读取或提取字符) • 输出流与 ostream 类相关联
文件输出 3-2 • ios类是流类层次结构的虚拟基类 • istream和ostream类从类ios派生而来 • 文件输出流是以文件为形式并链接到一个流
文件输出 3-3 • 三个提供文件输入/输出能力的流 • ifstream类 • 从istream类派生,用于文件输入(读取) • ofstream类 • 从ostream类派生,用于文件输出(写入) • fstream类 • 从iostream类派生,用于输入和输出
文件输出示例 #include <fstream.h> void main() { char *name = "QWERTY POIUYT"; int age = 49; float salary = 600.123f; ofstream fout ("TEST.TXT"); fout << "此行写入了 TEST.TXT 中\n"; fout << name << " " << age << " " << salary; fout.close(); }
文件输入 • istream包含为输入操作(流提取)定义的函数 • 创建一个ifstream类的对象,使用流提取操作符 (>>) 读取来自该对象的输入
文件输入示例 #include <fstream.h> void main () { ifstream fin ("TEST.TXT"); char line [100]; char name [50]; int age; float salary; fin >> line ; fin >> name >> age >> salary; cout << line << endl; cout << name << " " << age << " " << salary << endl; fin. close(); }
文件输入/输出 2-1 • fstream包含文件输入/输出中使用的类的定义 #include <fstream.h> • 在一个需要文件输入/输出 的程序中 • 每一个输出文件实例化一个ofstream类的对象 • 每一个输入文件实例化一个ifstream类的对象 • ofstream对象的使用和cout对象完全一样 • ifstream对象的使用和cin对象是完全一样
文件输入/输出示例 • 打开一个文件并删除所有内容 ofstream fout("TEST.TXT"); ofstream fout("TEST.TXT",ios::out); ofstream fout("TEST.TXT",ios::out|ios::trunc); • 打开一个文件并追加内容 ofstream fout("TEST.TXT",ios::app); • 打开一个文件进行二进制输出 ofstream fout("TEST.TXT",ios::binary);
随机访问 3-1 • get和put指针分别指定读和写操作的当前位置 • 每次执行输入或输出操作时,这两个指针都按一定顺序自动移动 • seekg( )和tellg( )函数可用来控制get指针 • seekp( )和tellp( )函数对put指针进行类似的操作
随机访问 3-2 • 使用tellg( )和tellp( )函数在文件中查找get和put指针的当前位置 • seekg( )使用两个参数 • 要移动的字节数 • 文件中重定位指针时的参考位置
随机访问 3-3 • 示例 1 ifstream iFil; iFil.seekg(10, ios::beg); • 示例 2 int position = iFil.tellg();
异常 • 异常是在运行时发生的错误事件 • 发生异常时,C++作出如下反应 • 产生异常的函数产生系统定义的消息 • 函数彻底终止 • 函数跳过中间级别继续处理另一部分
异常与错误 • 异常是在执行程序的过程中出现的错误或异常情况 • 错误是指在编写和编译程序时存在的问题 • 逻辑错误 • 语法错误
异常处理 • 异常处理的实现 • 为try块,也称为监视部分 • throw表达式,指示异常的种类 • catch处理程序,在发生异常时执行
异常处理示例 #include <iostream.h> int main() { try { int age; cout << "请输入您的年龄:"; cin >> age; if (age > 100 || age < 1) throw "年龄无效!"; cout << "throw语句之后" << endl; } catch (char *msg) { cout << "错误!"<< msg <<endl; } cout << "catch处理程序之后" << endl; return 0; }
总结 • 文件输入 • 文件输出 • 异常处理