C++学习笔记55:流类库与输入输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习笔记55:流类库与输入输出相关的知识,希望对你有一定的参考价值。

I/O流的概念及流类库的结构

程序与外界环境的信息交换

当程序与外界环境进行信息交换时,存在着两个对象:程序中的对象,文件对象。

流是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动;

 

流对象与文件操作

程序建立一个流对象

指定这个流对象与某个文件对象建立连接

程序操作流对象

流对象通过文件系统对所连接的文件对象产生作用

 

提取与插入

读操作在流数据抽象中被称为从流中提取;

写操作被称为向流中写入;

最重要的三个输出流:
ostream

ofstream

ostringstream

预先定义的输出流对象

cout标准输出

cerr标准错误输出,没有缓冲,发送给它的内容立即被输出

clog类似cerr,但是有缓冲,缓冲区慢了才输出;

 

标准输出换向

ofstream fout("b.out");

streambuf *pOld = cout.rdbuf(fout.rdbuf());

//...

cout.rdbuf(pOld);

 

构造输出流对象

ofstream myFile("filename");

或者

ofstream myFile;

myFile.open("filename");

备注:构造对象时或者用open打开文件时可以指定模式

ofstream myFile("filename",ios_base::out | ios_base::binary);

 

文件输出流成员函数的三种类型

与操作符等价的成员函数

执行非格式化写操作的成员函数

其他修改流状态且不同于操作符或者插入运算符的成员函数

 

文件输出流的成员函数

open函数:把流与特定的磁盘文件关联起来,需要指定打开模式;

put函数

把一个字符写到输出流中

write函数:把内存中的一块内容写到一个文件输出流中

seekp和tellp函数:操作文件流的内部指针

close函数:关闭与一个文件输出流关联的磁盘文件

错误处理函数:在写到一个流时进行错误处理

 

向文本文件输出

使用ofstream构造函数中的模式参量指定二进制输出模式

以通常方式构造一个流,然后使用setmode成员函数,在文件打开后改变模式;

通过二进制文件输出流对象完成输出

 

向二进制文件输出

#include <fstream>
using namespace std;

struct Date {
    int mon, day, year;
};

int main()
{
    Data dt = { 6,8,98};
    ofstream file("data.dat", ios_base::binary);
    file.write(reinterpret_cast<char *>(&dt), sizeof(dt));
    file.close();
    return 0;
}

 

向字符串输出

将字符串作为输出流的目标,可以实现将其他数据类型转换为字符串的功能

字符串输出流(ostringstream)

用于构造字符串

支持ofstream类的除open,close外的所有操作;

str函数可以返回当前已构造的字符串

典型应用:将数值转化为字符串

 

使用ostringstream将数值转换为字符串

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

template <class T> inline string toString(const T &v)
{
    ostringstream os;
    os << v;
    return os.str();
}

int main()
{
    string str1 = toString(5);
    cout << str1 << endl;
    string str2 = toString(20.2);
    cout << str2 << endl;
    return 0;
}

 

输入流

 


以上是关于C++学习笔记55:流类库与输入输出的主要内容,如果未能解决你的问题,请参考以下文章

C++ 流类库与输入输出 实验七

C++——流类库与输入/输出

CPP流类库与输入输出

9流类库与输入/输出3.输入流

9流类库与输入/输出2.3输出文件流成员函数

实验6 流类库与I/O