Version 3.0
文件操作和异常第六章
2
回顾
输出流
– 插入操作符
– 输出操纵符
输入流
– 提取操作符
– 输入操纵符
3
目标
文件输入
文件输出
异常处理
4
文件输入 /输出
从文件读取和写入文件的过程
需要添加头文件 fstream.h
两个基本类
– ifstream 读取文件
– ofstream 写入文件
5
文件输出 3-1
流是一组字符或数据流的源或目的
两种流
– 输出流(允许写入或存储字符)
– 输入流(允许读取或提取字符)
输出流与 ostream 类相关联
6
文件输出 3-2
ios类是流类层次结构的虚拟基类
istream和 ostream类从类 ios派生而来
文件输出流是以文件为形式并链接到一个流
7
文件输出 3-3
三个提供文件输入 /输出能力的流
– ifstream类从 istream类派生,用于文件输入(读取)
– ofstream类从 ostream类派生,用于文件输出(写入)
– fstream类从 iostream类派生,用于输入和输出
8
文件输出 示例
#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();
}
9
文件输入
istream包含为输入操作(流提取)定义的函数
创建一个 ifstream类的对象,使用流提取操作符 (>>) 读取来自该对象的输入
10
文件输入示例
#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();
}
11
文件输入 /输出 2-1
fstream包含文件输入 /输出中使用的类的定义
#include <fstream.h>
在一个需要文件输入 /输出 的程序中
– 每一个输出文件实例化一个 ofstream类的对象
– 每一个输入文件实例化一个 ifstream类的对象
– ofstream对象的使用和 cout对象完全一样
– ifstream对象的使用和 cin对象是完全一样
12
文件输入 /输出 2-2
打开模式 含义
ios::out 打开以进行写入
ios::in 打开以进行读取
ios::ate 在打开时查找到 文件结尾
ios::app 追加到文件结尾
ios::trunc 如果文件存在则删除
ios::nocreate 如果文件不存在则打开失败
ios::replace 如果文件已存在 则打开失败
ios::binary 打开一个二进制文件
13
文件输入 /输出示例
打开一个文件并删除所有内容
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);
14
随机访问 3-1
get和 put指针分别指定读和写操作的当前位置
每次执行输入或输出操作时,这两个指针都按一定顺序自动移动
seekg( )和 tellg( )函数可用来控制 get指针
seekp( )和 tellp( )函数对 put指针进行类似的操作
15
随机访问 3-2
使用 tellg( )和 tellp( )函数在文件中查找 get和
put指针的当前位置
seekg( )使用两个参数
– 要移动的字节数
– 文件中重定位指针时的参考位置
16
随机访问 3-3
示例 1
ifstream iFil;
iFil.seekg(10,ios::beg);
示例 2
int position = iFil.tellg();
17
异常
异常是在运行时发生的错误事件
发生异常时,C++作出如下反应
– 产生异常的函数产生系统定义的消息
– 函数彻底终止
– 函数跳过中间级别继续处理另一部分
18
异常与错误
异常是在执行程序的过程中出现的错误或异常情况
错误是指在编写和编译程序时存在的问题
– 逻辑错误
– 语法错误
19
异常处理
异常处理的实现
– 为 try块,也称为监视部分
– throw表达式,指示异常的种类
– catch处理程序,在发生异常时执行
20
异常处理示例
#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;
}
21
总结
文件输入
文件输出
异常处理
文件操作和异常第六章
2
回顾
输出流
– 插入操作符
– 输出操纵符
输入流
– 提取操作符
– 输入操纵符
3
目标
文件输入
文件输出
异常处理
4
文件输入 /输出
从文件读取和写入文件的过程
需要添加头文件 fstream.h
两个基本类
– ifstream 读取文件
– ofstream 写入文件
5
文件输出 3-1
流是一组字符或数据流的源或目的
两种流
– 输出流(允许写入或存储字符)
– 输入流(允许读取或提取字符)
输出流与 ostream 类相关联
6
文件输出 3-2
ios类是流类层次结构的虚拟基类
istream和 ostream类从类 ios派生而来
文件输出流是以文件为形式并链接到一个流
7
文件输出 3-3
三个提供文件输入 /输出能力的流
– ifstream类从 istream类派生,用于文件输入(读取)
– ofstream类从 ostream类派生,用于文件输出(写入)
– fstream类从 iostream类派生,用于输入和输出
8
文件输出 示例
#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();
}
9
文件输入
istream包含为输入操作(流提取)定义的函数
创建一个 ifstream类的对象,使用流提取操作符 (>>) 读取来自该对象的输入
10
文件输入示例
#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();
}
11
文件输入 /输出 2-1
fstream包含文件输入 /输出中使用的类的定义
#include <fstream.h>
在一个需要文件输入 /输出 的程序中
– 每一个输出文件实例化一个 ofstream类的对象
– 每一个输入文件实例化一个 ifstream类的对象
– ofstream对象的使用和 cout对象完全一样
– ifstream对象的使用和 cin对象是完全一样
12
文件输入 /输出 2-2
打开模式 含义
ios::out 打开以进行写入
ios::in 打开以进行读取
ios::ate 在打开时查找到 文件结尾
ios::app 追加到文件结尾
ios::trunc 如果文件存在则删除
ios::nocreate 如果文件不存在则打开失败
ios::replace 如果文件已存在 则打开失败
ios::binary 打开一个二进制文件
13
文件输入 /输出示例
打开一个文件并删除所有内容
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);
14
随机访问 3-1
get和 put指针分别指定读和写操作的当前位置
每次执行输入或输出操作时,这两个指针都按一定顺序自动移动
seekg( )和 tellg( )函数可用来控制 get指针
seekp( )和 tellp( )函数对 put指针进行类似的操作
15
随机访问 3-2
使用 tellg( )和 tellp( )函数在文件中查找 get和
put指针的当前位置
seekg( )使用两个参数
– 要移动的字节数
– 文件中重定位指针时的参考位置
16
随机访问 3-3
示例 1
ifstream iFil;
iFil.seekg(10,ios::beg);
示例 2
int position = iFil.tellg();
17
异常
异常是在运行时发生的错误事件
发生异常时,C++作出如下反应
– 产生异常的函数产生系统定义的消息
– 函数彻底终止
– 函数跳过中间级别继续处理另一部分
18
异常与错误
异常是在执行程序的过程中出现的错误或异常情况
错误是指在编写和编译程序时存在的问题
– 逻辑错误
– 语法错误
19
异常处理
异常处理的实现
– 为 try块,也称为监视部分
– throw表达式,指示异常的种类
– catch处理程序,在发生异常时执行
20
异常处理示例
#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;
}
21
总结
文件输入
文件输出
异常处理