C++标准库之IO库(二)
一:文件的输入和输出
fstream文件中定义了三种支持文件IO的类型,ifstream提供读文件的功能,ofstream提供写文件的功能,fstream提供读写文件的功能。因为它们分别是从istream,ostream,iostream继承来的,所以可以使用操作符(<<和>>)进行格式化的输入输出,条件流状态也可以使用。
除了继承下来的函数,文件输入输出流提供了使用要绑定的文件名作为参数的构造函数,同时提供了open和close函数。
1. 文件流的打开和关闭
打开文件流有两种方式,一种是使用文件名(c++中使用c语言风格的文件名,如果文件名是string类型,则需要string.c_str())作为参数来构造文件输入输出流,这样文件流就自动的处于打开状态。如果定义文件输入输出流时没有使用文件名的构造函数,例如: istream in;则需要调用in的open函数来将流与文件绑定。可以直接检测文件流的状态,如if(in)。通过close函数可以关闭文件流与某一文件的绑定。
2. 文件流的状态
关闭文件流并不能改变文件流的状态,使用clear操作可以清除文件流的状态,像文件流被重新创建一样。如果需要重用这个文件流,则需要关闭上一个文件流的同时使用clear来清除文件流的状态。
3.文件模式
在打开文件时,都需要指定文件模式,不显示指定文件模式时根据流类型的不同来设置的默认的文件模式。下面列出不同的文件模式:
in 打开文件做读操作
out 打开文件做写操作
app 在每次写之前找到文件尾
ate 打开文件之后立即将文件定位在文件尾
trunc 打开文件时清空已存在的
binary 以二进制模式进行IO操作
其中,in模式只能用于ifstream流进行读操作,out,app,trunc只用用于ofstream和fstream流处理,ate和binary可以用于所有的文件流。ate只在文件打开时有用,文件打开后定位到文件尾。使用out模式打开文件会清除文件内容,只有使用app模式打开文件才可以保存文件的内容。默认情况下,fstream使用in和out模式打开文件,不清空内容。如果值用out模式,则清空内容,如果使用trunc模式,则一定会清空内容。文件模式是文件的模式,而不是流的模式。
二:字符串流
iostream标准库支持内存中的输入输出,只要将流与存储在内存中的string对象绑定起来即可。Stream头文件中包含了istringstream,ostringstream,stringstream三个类型,提供string读,写和读写的功能。
除了基础的输入输出流所具有的功能之外,stringstream类可以使用string作为参数来构造stringstream流,string对象被复制给stringstream对象中。
Stringstream类的用法:
string line ,word;
while(getline(cin,line))
{
istringstream stream(line);
while(stream>>word)
{
//do something!
}
}
此外,可以使用stringstream来格式化输入与输出。