C++ IO学习
关于IO,主要有这么三种类型:标准输入输出,文件输入输出,字符串流。后面两种都是继承自第一种标准输入输出的。他们分别对应的头文件是:
标准输入输出:#include <iostream>
文件输入输出:#include <fstream>
字符串流:#include <sstream>
流对象是不能复制和拷贝的。因此流对象不能用于赋值和参数传递,如果一定要传递,那么必须传递指针或者引用。
这里记录了一个例子来说明,流对象的使用,通过这个使用,来说明流对象的属性状态。上代码,假如在本地D盘根目录下有个文件hello.txt。文件中的内容是001--006。
1 #include "stdafx.h" 2 #include <fstream> 3 #include <sstream> 4 #include <iostream> 5 6 using namespace std; 7 8 9 ifstream &print(ifstream &in) 10 { 11 string str; 12 13 cout << in.bad() << endl; 14 cout << in.good() << endl; 15 cout << in.fail() << endl; 16 cout << in.eof() << endl; 17 cout << "--------------------1" << endl; 18 while (in >> str) 19 { 20 cout << str << endl; 21 } 22 cout << "--------------------2" << endl; 23 cout << in.bad() << endl; 24 cout << in.good() << endl; 25 cout << in.fail() << endl; 26 cout << in.eof() << endl; 27 cout << "--------------------3" << endl; 28 in.clear(); 29 cout << in.bad() << endl; 30 cout << in.good() << endl; 31 cout << in.fail() << endl; 32 cout << in.eof() << endl; 33 in.seekg(0, ios_base::beg); 34 return in; 35 } 36 37 int main() 38 { 39 ifstream in("d://hello.txt"); 40 string str; 41 print(in); 42 while (in >> str) 43 { 44 cout << str << endl; 45 } 46 in.close(); 47 return 0; 48 }
如上代码示例了读取一个文件,并将文件内容打印到控制台上,并且将IO流重置,并且重新打印一遍。
其中如下代码表示了流对象的四种状态:
in.bad() 如果流被破坏,则返回true.
in.good()如果流处于有效状态,则返回true。
in.fail() 如果IO操作失败,则返回true。
in.eof() 如果读取文件到了文件末尾,则返回true。
in.clear(); 用于重置所有的状态。
in.seekg(0, ios_base::beg); 将文件操作的指针重置到文件开始处。