C++ Primer(一)_标准库_IO库

I/O库

屏蔽了具体IO对象,统一>>、<<、getline操作

头文件与类型

头文件 类型 类型(宽字符版)
iostream istream wistream
ostream ostream
iostream iostream
fstream ifstream wifstream
ofstream wofstream
fstream wfstream
sstream istringstream wistringstream
ostringstream wostringstream
stringstream wstringstream

流状态

strm是一种流类型

类型或成员函数 返回或说明
strm::iostate 及其相关类型
strm::badbit 流崩溃,系统级错误,不可恢复
strm::failbit IO失败,读取到与预料不符或eof时,可修复
strm::eofbit EOF
strm::goodbit 未错误
s.eof() bool
s.bad() bool
s.good() bool
s.clear() void,所有位复位,流有效
s.clear(flags) void,flags未上述strm::iostate的或
s.setstate(flags) void
s.rdstate strm::iostate
  • 影响:流一旦错误,后续IO都会失败,bad, fail, eof都算错误
  • 流作为条件使用,没错误就是true

输出缓冲管理

每个输出流都管理一个缓冲区

  • 缓冲刷新条件

    警告!程序崩溃,输出缓冲不会被刷新

    • 程序正常结束
    • 缓冲区满
    • endl:添加换行再刷新;ends:添加空格再刷新;flush:仅刷新
    • 设置unibuf
    • 关联的流被读写
  • unibuf操作符

    影响的是当前设置的流

    cout << unibuf;	// 之后所有输出操作都会立即刷新
    cout << nounibuf; // 返回正常刷新方式
    
  • 流关联

    当一个流被其他流关联时,其他流的读写会导致它被刷新,如:cout,被cin、cerr关联

    // 版本1:无参数,返回关联的流或nullptr
    // 版本2:os指针,传递空指针解开关联
    // 只能输入关联输出,或输出关联输出
    is.tie(&os);
    os.tie(&os2);
    

文件流

  • 打开方式

    fstrm指某种文件流类型

    fstrm:: 说明
    in
    out
    app 每次均定位到末尾
    ate 打开即定位末尾
    trunc 截断
    binary 二进制
    • 说明
      • if默认in, of默认out, f默认in|out, if不能用out, of类似
      • app隐式out
      • out隐式trunc
    • 定义时打开:
    fstrm f(path);	// path可以是string或c字符串,mode默认根据fstrm类型获得
    fstrm f(path, mod);	// 
    
    • open打开:
    // 支持打开新文件
    f.open(path);		// mode根据f类型获得
    f.open(path, mode); // 
    
  • 其他操作

    f.close();		// 流被析构时也会关闭
    f.is_open();
    

string流

  • 输入流

    • 打开方式——都是拷贝

      sstrm s;	// 未绑定
      sstrm s(str);	// 拷贝str
      s.str();	// 返回完整str的拷贝,即使s被读取过
      s.str(str);	// 拷贝str
      
  • 输出流

    相当于一个string的缓冲区,使用<<写入

    ostringstram os;
    os << str;
    cout << os.str();	// .str()返回内容, 不会清楚原来的内容
    
posted @ 2019-10-17 22:31  YanceW  阅读(111)  评论(0)    收藏  举报