Posted on 

文件读写

要完成文件的读写,首先要包含fstream 头文件。

打开文件

输出模式

1
ofstream outfile( "seq_data.txt" );

在输出模式下:

  1. 文件不存在,则文件被创建。
  2. 文件存在,则文件被打开,原有数据被丢弃

追加模式

1
2
3
4
5
6
7
8
// 首先需要检验文件是否可以成功打开。最简单的方法是检验class object的真伪
if ( ! outfile )
// cerr代表标准错误设备,和cout相同,唯一区别是没有缓冲
cerr << "error";
else
ofstream outfile( "seq_data.txt", ios_base::app );
outfile << usr_name << ' '
<< num_tries << endl;

操纵符

其中,endl 是事先定义好的操纵符,由iostream library提供。
操纵符并不会将数据写到iostream,也不会从中读取数据。其作用是在iostream上执行某些操作。

读取模式

定义一个ifstream (可供输入的file stream)对象,并将文件名传入:若文件未能打开,则对象为false;如果成功打开,则文件写入位置被设定在起始处。

1
2
3
4
5
6
7
8
9
ifstream infile( "seq_data.txt" );
if ( !infile )
{
//文件未能打开
}
else
{
//OK
}

同时读写

为了同时读写,需要定义fstream 对象。
要以追加模式打开,需要传入ios_base::in | ios_base::app

1
2
3
4
5
6
7
8
9
10
11
fstream iofile( "seq_data.txt",
ios_base::in|ios_base::app );
if ( !iofile )
{
//文件未能打开
}
else
{
//OK
//定位到文件起始处,再读取
iofile.seekg( 0 );

seekg()

在以追加模式打开档案时候,文件位置会处于末尾。此时需要通过seekg() 重新将iofile定位到文件起始处,来防止读取文件出现文件结束的问题;由于文件用追加模式开启,任何写入仍然会被添加到文件末尾。