aihot  2020-11-12 09:24:27  OpenCV |   查看评论   

in

以读方式打开

out

以写方式打开

app

每次写操作均定位到文件末尾

ate

打开文件后立即定位到文件末尾

trunc

截断文件

binary

以二进制方式进行IO

 

用文件名初始化一个流时或用open打开文件时都可以指定文件模式,但要注意下面几种限制:

<1>只可以对ofstream或fstream对象设定out模式。

<2>只可以对ifstream或fstream对象设定in模式。

<3>只有out设定时才可以设定trunc模式。

<4>只要trunc没有被设定,就可以设定app模式。在app模式下,即使没有显式指定out模式 ,文件也总是以输出方式被打开。

<5>默认情况下,即使我们没有指定trunc,以out模式打开的文件也会被截断。为了保留以out模式打开的文件的内容,我们必须同时指定app模式,这样只会将数据追加写到文件末尾;或者同时指定in模式,即打开文件同时进行读写操作。

<6>ate和binary模式可以用于任何类型的文件流对象,且可以与其他任何文件模式组合使用。

以out模式打开文件会丢弃已有数据,所以阻止一个ofstream清空给定文件内容的方法是同时指定app模式。

// 在这几条语句中,file1都被截断 
ofstream out("file1"); // 隐含以输出模式打开文件并截断文件 
ofstream out2("file1", ofstream::out); // 隐含地截断文件 
ofstream out3("file1", ofstream::out | ofstream::trunc); // 显式截断文件  // 为了保留文件内容,我们必须显式指定app 
ofstream app("file2", ofstream::app); // 隐含为输出模式 
ofstream app("file2", ofstream::app | ofstream::out);

7,使用字符流

sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样。

7.1 使用istringstream

很多时候我们需要逐行处理文本,而且需要对行内的单词进行单独分析,这时候使用istringstream是很方便的。

比如,我们程序需要一次读取一行文本,然后将其中的单词分别取出保存在一个vector中。

string line,word;  while (getline(cin, line))  {      vector<string> wordList;      istringstream lineText(line);      while (lineText >> word)      {          wordList.push_back(word);      }  }

7.2 使用ostringstream

当我们逐步构造输出时,希望最后一起打印时,ostringstream是很有用的,它可以帮我们完成类似于itoa,ftoa这种数字转字符串的功能。

int num1 = 42;  double pi = 3.1415926;  string str = "some numbers";  ostringstream formatted;  formatted << str << pi << num1;  cout << formatted.str() << endl;

其中str成员函数是stringstream有几个特有操作之一。

string s; stringstream strm(s);// 保存s的一个拷贝,此构造函数是explicit的。
strm.str(); // 返回strm所保存的string对象的拷贝。
strm.str(s); // 将s拷贝到strm中,返回void。

8,格式化输入输出

8.1 操纵符

标准库定义了一组操纵符用来修改流的状态,一个操纵符是一个函数或是一个对象,会影响流的状态,并能用作输入或输出运算符的运算对象,比如我们熟悉的endl,就是一个操纵符。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自C++的那些事:流与IO类

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]