由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,所以它在fstream.h头文件中是没有像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象,我们要以文件作为设备向文件输出信息(也就是向文件写数据),那么就应该使用ofstream类。
ofstream类的默认构造函数原形为:
ofstream::ofstream(constchar*filename,intmode = ios::out,intpenprot = filebuf::openprot);
- filename: 要打开的文件名
- mode: 要打开文件的方式
- prot: 打开文件的属性
其中mode和openprot这两个参数的可选项表见下表:
可以用“或”把以上属性连接起来,如ios::out|ios::binary。
mode属性表 ios::app 以追加的方式打开文件 ios::ate 文件打开后定位到文件尾,ios:app就包含有此属性 ios::binary 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 ios::in 文件以输入方式打开 ios::out 文件以输出方式打开 ios::trunc 如果文件存在,把文件长度设为0
可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。
openprot属性表 属性 含义 0 普通文件,打开访问 1 只读文件 2 隐含文件 4 系统文件
实例代码如下:
#include<fstream>
usingnamespacestd;
intmain()
o
fstream myfile("c:\\1.txt",ios::out|ios::trunc,0);
myfile<<"中国软件开发实验室"<<endl<<"网址:"<<"www.cndev-lab.com";
system("pause");
}
文件使用完后可以使用close成员函数关闭文件。
ios::app为追加模式,在使用追加模式的时候同时进行文件状态的判断是一个比较好的习惯。
示例如下:
#include<iostream>
#include<fstream>
usingnamespacestd;
intmain()
o
fstream myfile("c:\\1.txt",ios::app,0);
if(!myfile)//或者写成myfile.fail()
cout<<"文件打开失败,目标文件状态可能为只读!";
system("pause");
myfile<<"中国软件开发实验室"<<endl<<"网址:"<<"www.cndev-lab.com"<<endl;
}
在定义ifstream和ofstream类对象的时候,我们也可以不指定文件。以后可以通过成员函数open()显式的把一个文件连接到一个类对象上。
例如:
#include<iostream>
#include<fstream>
usingnamespacestd;
intmain()
o
myfile.open("c:\\1.txt",ios::out|ios::app,0);
if(!myfile)//或者写成myfile.fail()
cout<<"文件创建失败,磁盘不可写或者文件为只读!";
system("pause");
myfile<<"中国软件开发实验室"<<endl<<"网址:"<<"www.cndev-lab.com"<<endl;
}
下面我们来看一下是如何利用ifstream类对象,将文件中的数据读取出来,然后再输出到标准设备中的例子。
代码如下:
#include<iostream>
#include<fstream>
#include<string>
usingnamespacestd;
intmain()
i
myfile.open("c:\\1.txt",ios::in,0);
if(!myfile)
cout<<"文件读错误";
system("pause");
charch;
while(myfile.get(ch))
c
cout.put(ch);//cout<<ch;这么写也是可以的
myfile.close();
system("
pause");
}
上例中,我们利用成员函数get(),逐一的读取文件中的有效字符,再利用put()成员函数,将文件中的数据通过循环逐一输出到标准设备(屏幕)上, get()成员函数会在文件读到默尾的时候返回假值,所以我们可以利用它的这个特性作为while循环的终止条件,我们同时也在上例中引入了C++风格的字符串类型string,在循环读取的时候逐一保存到content中,要使用string类型,必须包含string.h的头文件。
我们在简单介绍过ofstream类和ifstream类后,我们再来看一下fstream类,fstream类是由iostream派生而来,fstream类对象可以同对文件进行读写操作。
示例代码如下:
#include<iostream>
#include<fstream>
usingnamespacestd;
intmain()
f
myfile.open("c:\\1.txt",ios::out|ios::app,0);
if(!myfile)
cout<<"文件写错误,文件属性可能为只读!"<<endl;
system("pause");
myfile<<"中国软件开发实验室"<<endl<<"网址:"<<"www.cndev-lab.com"<<endl;
myfile.open("c:\\1.txt",ios::in,0);
if(!myfile)
cout<<"文件读错误,文件可能丢失!"<<endl;
system("pause");
charch;
while(myfile.get(ch))
c
system("pause");
}
由于fstream类可以对文件同时进行读写操作,所以对它的对象进行初始话的时候一定要显式的指定mode和openprot参数。
{
myfile.close()
{
{
exit(1);
}
myfile.close();
{
fstream myfile;
{
exit(1);
}
myfile.close();
{
fstream myfile;
{
exit(1);
}
string content;
{
ontent+=ch;
}
cout<<content;
{
stream myfile;
{
exit(1);
}
myfile.close();
{
exit(1);
}
{
out.put(ch);
}
myfile.close();