网站 后台,陕西省建设网官方网站,深圳微信定制开发,杭州网站建设索q479185700文章目录IO库类型和头文件IO对象无拷贝或赋值IO流的条件状态文件输入输出ifstream 示例ofstream 示例文件模式以out模式打开文件会丢弃已有数据每次调用open时都会确定文件模式ofstream 保留源文件 追加数据 示例string流istringstream示例ostringstream示例IO库类型和头文件
…
文章目录IO库类型和头文件IO对象无拷贝或赋值IO流的条件状态文件输入输出ifstream 示例ofstream 示例文件模式以out模式打开文件会丢弃已有数据每次调用open时都会确定文件模式ofstream 保留源文件 追加数据 示例string流istringstream示例ostringstream示例IO库类型和头文件
为了支持不同种类的IO处理操作标准库定义了一些IO类型。 iostream定义了用于读写流的基本类型。fstream定义了读写命名文件的类型。sstream定义了读写内存string对象的类型。 类型ifstream和istringstream都继承自istream因此我们可以像使用istream对象一样来使用ifstream和istringstream。
IO对象无拷贝或赋值
由于不能拷贝IO对象因此我们也不能将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象会改变其状态因此传递和返回的引用不能是const的。
IO流的条件状态
一个流一旦发生错误其上后续的IO操作都会失败。只有当一个流处于无错状态时我们才可以从它读取数据向它写入数据。由于流可能处于错误状态因此代码通常应该在使用一个流之前检查它是否处于良好状态。确定一个流对象的状态的最简单的方法是将它当做一个条件使用。 badbit表示系统级错误如不可恢复的读写错误。通常情况下一旦badbit被置位流就无法再使用了。在发生可恢复错误后failbit被置位如期望读取数值却读出一个字符等错误。这种问题通常是可以修正的流还可以继续使用。如果到达文件结束位置eofbit和failbit都会被置位。goodbit的值为0表示流未发生错误。如果badbit、failbit和eofbit任一个被置位则检测流状态的条件会失败。
文件输入输出
头文件fstream定义了三个类型来支持文件IOifstream从一个给定文件读取数据ofstream向一个给定文件写入数据以及fstream可以读写给定文件。 创建文件流对象时我们可以提供文件名可选的。如果提供了一个文件名则open成员函数会自动被调用示例如下
ifstream in(ifile); // 构造一个ifstream并打开给定文件ifile在新c标准中文件名ifile既可以是库类型string对象也可以是C风格字符数组
ofstream out; // 输出文件流未关联到任何文件在要求使用基类型对象的地方我们可以用继承类型的对象来替代。这意味着接受一个iostream类型引用或指针参数的函数可以用一个对应的fstream或sstream类型来调用。也就是说如果有一个函数接受一个ostream参数我们在调用这个函数时可以传递给它一个ofstream对象对istream和ifstream也是类似的。
流如果调用open失败failbit会被置位。对一个已经打开的文件流调用open会失败并会导致failbit被置位。随后的试图使用文件流的操作都会失败。为了将文件流关联到另外一个文件必须首先关闭已经关联的文件。一旦文件成功关闭我们就可以打开新的文件关联新的文件。
当一个fstream对象被销毁时close会自动被调用。
ifstream 示例
打开string文件按行存储元素str即是每一行的string
ifstream in(text.txt);
string str;
getline(in,str);将每一个单词作为一个独立的元素进行存储
ifstream in(text.txt);
string str;
instr;ofstream 示例
ofstream ofs(test.txt);
ofs hello worldendl;文件模式
每个流都有一个关联的文件模式用来指出如何使用文件。
以out模式打开文件会丢弃已有数据
默认情况下我们打开一个ofstream时文件的内容会被丢弃。阻止一个ofstream清空给定文件内容的方法是同时指定app模式。 保留被ofstream打开的文件中已有数据的唯一方法是显式指定app或in模式。
每次调用open时都会确定文件模式
通常情况下out模式意味着同时使用trunc模式即当前文件内容将被清空。当指定app模式时文件中的已有数据得以保留所有写操作都在文件末尾进行。
ofstream 保留源文件 追加数据 示例
ofstream ofs(test.txt,ofstream::app);
ofs hello worldendl;string流
sstream头文件定义了三个类型来支持内存IO这些类型可以向string写入数据从string读取数据就像string是一个IO流一样。 istringstream从string读取数据ostringstream向string写入数据而头文件stringstream既可以从string读取数据也可以向string写入数据。
istringstream示例
以整行为元素读取文件存入vector中并用istringstream从vector中读取元素每次读取一个单词
ifstream ifs(test.txt);string str;vectorstringvec;while (getline(ifs,str)) {vec.push_back(str);}for (auto a:vec) {istringstream vecStr(a);string tmp;while(vecStr tmp)cout tmpendl;}ostringstream示例
ostringstream os;
os hello world endl;
cout os.str();此时界面上会显示hello world