#include <iostream>
#include <sstream> //istringstream 必须包含这个头文件
#include <string>
using namespace std;
/*
std::ios_base::openmode
std::ios_base::in: 打开文件进行读操作,即读取文件中的数据
如果指定路径中没有包含该文件,不会创建,而且设置std::ios_base::badbit.
std::ios_base::out: 打开文件进行写操作,即写入数据到文件。
如果指定路径中并没有包含该文件,会创建一个新的.文件
如果指定的路径中包含有该文件,那么打开后,会清空文件中内容,其实就是暗含了std::ios_base::truc.
std::ios_base::in | std::ios_base::out: 打开文件进行读写操作
如果指定的路径没有包含该文件,也不会创建,并且会设置std::ios_base::badbit.
std::ios_base::app: 每次进行写入操作的时候都会重新定位到文件的末尾.
如果指定路径不存在该文件那么创建一个.
std::ios_base::ate: 打开文件之后立即定位到文件末尾
如果指定的路径不存在该文件不会创建.
std::ios_base::trunc: 打开文件,若文件已存在那么,清空文件内容.
如果指定的路径不存在该文件不会创建.如果指定的路径含有该文件那么清空文件中的内容.
std::ios_base::binary: 以二进制的方式对打开的文件进行读写.
如果指定的路径不存在该文件不会创建.
总结:
1,凡包含std::ios_base::out mode的操作方式,如果文件不存在都是会创建.
std::ios_base::out | std::ios_base::app/ate/trunc 这些组合的方式来操作文件,
如果指定的路径该文件不存在就会创建一个空的.
2,如果std::ios_base::in 和 std::ios_base_out同时使用就会按照
std::ios_base_in,也就是即使文件不存在也不会创建. 3,std::ios_base::in |
std::ios_base::out | std::ios_base::app/ate/trunc 这些组合的方式来操作文件,
如果指定路径的文件不存在也不会创建而且会把当前stream的state设置为std::ios_base::badbit.
4,由于std::ios_base::out和std::ios_base::trunc单独使用的时候在打开已存在文件的情况下都会清空文件内容,
因此我们使用的时候要格外注意.例如:我们可以通过std::ios_base::out |
std::ios_base::app组合的形式来消除打开已存在文件时候的清空动作.
*/
void Test1() {
string str = "i am a boy";
istringstream is(str);
string s;
while (is >> s) {
cout << s << endl;
}
}
void Test2() {
// default constructor (input/output stream)
std::stringstream buf1;
buf1 << 7;
int n = 0;
buf1 >> n;
std::cout << "buf1 = " << buf1.str() << " n = " << n << '\n';
// input stream
std::istringstream inbuf("-10");
inbuf >> n;
std::cout << "n = " << n << '\n';
// output stream in append mode (C++11)
std::ostringstream buf2("test", std::ios_base::ate);
buf2 << " 123";
int x = 456;
buf2 << x;
std::cout << buf2.str() << '\n';
std::ostringstream buf3("test");
buf3 << "12";
// int x3 = 456;
// buf3 << x3;
std::cout << buf3.str() << '\n';
/*
其中,stringstream.str(std::string())的作用是清空stringstream内部的字符串内容,
stringstream.clear()的作用是将该流中所有的状态位复位,将流的状态设置为有效。这一句也很关键,
这是因为当流发生错误后,其上后续的IO操作都会失败,只有当一个流处于无错状态时,
我们才可以从他读取数据和写入数据。
*/
buf3.str(std::string());
buf3.clear();
}
int main() {
cout << "===========================" << endl;
Test1();
cout << "===========================" << endl;
Test2();
return 0;
}
std::stringstream
最新推荐文章于 2024-07-06 16:48:43 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)