ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++流类库(11)

2021-06-01 09:53:50  阅读:362  来源: 互联网

标签:类库 11 ofstream 文件 ios C++ base 打开 out


C++的流类库由几个进行I/O操作的基础类和几个支持特定种类的源和目标的I/O操作的类组成。

流类库的基础类

ios类是isrream类和ostream类的虚基类,用来提供对流进行格式化I/O操作和错误处理的成员函数。用关键字virtual可将公共基类说明为虚基类,虚基类的定义很难处理,这就是为什么最初的C++语言没有能支持多重继承的原因。

ios类公有派生的istream和ostream两个类分别提供对流进行提取操作和插入操作的成员函数,而iostream类通过组合istream类和ostream类来支持对一个流进行双向(也就是输入和输出)操作,它并没有提供新的成员函数。

C++流类库预定义了4个流,它们是cin、cout、cerr、clog。事实上,可以将cin视为类istream的一个对象,而将cout视为类ostream的对象。

ios_base类简介

ios_base类派生ios类,ios类又是istream类和ostream类的虚基类。

文件流

在C++里,文件操作是通过流来完成的。C++总共有输入文件流、输出文件流和输入输出文件流3种,并已将它们标准化。  

要打开一个输入文件流,需要定义一个ifstream类型的对象;要打开一个输出文件流,需要定义一个ofstream类型的对象;如果要打开输入输出文件流,则要定义一个fstream类型的对象。这3种类型都定义在头文件<fstream>里。

使用文件流

(1)打开一个相应的文件流.  

(2)把这个流和相应的文件关联起来。  因为ifstream、ofstream和fstream这3个类都具有自动打开文件的构造函数,而这个构造函数就具有open()的功能。因此,事实上可以用一条语句:             ofstream myStream("myText.txt");  来完成上述两步。如果指定文件路径,路径中的“\”号必须使用转义字符表示。  

(3)操作文件流。

文件打开方式选项:

ios::in    = 0x01, //供读,文件不存在则创建(ifstream默认的打开方 式)  
ios::out    = 0x02, //供写,文件不存在则创 建,若文件已存在则清空原内容(ofstream默认的打开方式)  
ios::ate    = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用  
ios::app    = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入 新的内容,指针位置总在最后  
ios::trunc   = 0x10, // 在读写前先将文件长度截断为0(默认)  
ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用  
ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用  
ios::binary  = 0x80  //二进制格式文件  

文件保护方式

filebuf::openprot;   //默认的兼容共享方式  
filebuf::sh_none;    //独占,不共享  
filebuf::sh_read;    //读共享  
filebuf::sh_write;   //写共享 

打开文件的方法
调用构造函数时指定文件名和打开模式

ifstream f("d:\\12.txt", ios::nocreate);         //默认以 ios::in 的方式打开文件,文件不存在时操作失败  
ofstream f("d:\\12.txt");                //默认以 ios::out的方式打开文件  
fstream  f("d:\\12.dat", ios::in|ios::out|ios::binary); //以读 写方式打开二进制文件  

使用Open成员函数

fstream f;  
f.open("d:\\12.txt",ios::out);             //利用同一对象对多个文件进行操作时要用到open函数  

检查是否成功打开成功:

if (f) {...}       //对ifstream、ofstream对象可 用,fstream对象不可用。
if (f.good()) {...}  

失败:

if (!f) {...}       // !运算符已经重载  
if (f.fail()) {...} 

 demo传送门

典型流成员函数

输出流的open函数 open函数的原型如下:  

void open(char const *,int filemode,int =filebuf::openprot);  

它有3个参数,第一个是要打开的文件名,第2个是文件的打开方式,第3个是文件的保护方式,一般都使用默认值。第2个参数可以取如下所示的值:

ios_base::in 打开文件进行读操作,这种方式可避免删除现存文件的内容

ios_base::out 打开文件进行写操作,这是默认模式  

ios_base::ate 打开一个已有的输入或输出文件并查找到文件尾

ios_base::app 打开文件以便在文件尾部添加数据  

ios_base::binary 指定文件以二进制方式打开,默认为文本方式

ios_base::trunc 如文件存在,将其长度截断为零并清除原有内容

除ios_base::app方式之外,在其他几种方式下,文件刚刚打开是,指示当前读写位置的文件指针都定位于文件的开始位置,而ios_base::app使文件当前的写指针定位于文件尾。这几种方式也可以通过“或”运算符“|”同时使用。

close成员函数  

close成员函数用来关闭与一个文件流相关联的磁盘文件。如果没有关闭该文件,因为文件流是对象,所以在文件流对象的生存期结束时,将自动关闭该文件。不过,应养成及时关闭不再使用的文件的习惯,以避免误操作或者干扰而产生的错误。

标签:类库,11,ofstream,文件,ios,C++,base,打开,out
来源: https://blog.51cto.com/u_14999950/2838979

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有