I/O流类库中有两组类模板实例:面向宽字符的和面向窄字符的。面向宽字符的类支持多字节的字符,面向窄字符的类支持单字节字符。
输出流:
最重要的三个输出流是 ostream, ofstream和ostringstream。 预定义的ostream类对象用来完成向标准设备的输出,包括:
cout 标准输出; cerr 标准错误输出,没有缓冲,发送给它的内容立即被输出 clog 类似于cerr,但是有缓冲,缓冲区满时被输出
ofstream类支持磁盘文件输出。如果需要一个只输出地磁盘文件,可以构造一个ofstream类的对象。
如果仅使用预先定义的cout,cerr或clog对象,就不需要构造一个输出流。
构造输出文件流的常用方法:
ofstream myFile; myFile.open(“filename”,iosmode); 或 ofstream * pmyFile = new ofstream; pmyFile -> open(“filename”,iosmode); 或在调用构造函数时指定文件名和模式 ofstream myFile(“filename”,iosmode);
插入运算符和操纵符的使用
插入(<<)运算符时所有标准C++数据类型预先设计的,用于传送字节都一个输出流对象。插入运算符和预先定义的操纵符一起工作,可以控制输出格式。
很多操纵符都定义字ios_base类中和
1、设置输出宽度:
使用width()函数控制输出宽度:cout.width(10); cout.fill(‘*’);
使用setw操纵符指定输出宽度:cout << setw(6) <<”123”<< setw(10) <<”abc” << endl;
2、对齐方式
cout << setiosflags(ios_base :: left) << setw(10) << “name” << endl;
3、精度
cout<<setprecision(1)<<value<<endl;
4、进制
dec、oct和hex操纵符设置输入和输出地默认进制
输出文件流成员函数:
1、输出流的open函数 2、输出流的close函数 3、put函数:
cout.put(‘A’);
4、write函数
write把一个内存中的一块内容写到一个输出文件流中,长度参数指出写的字节数:
Date dt = {1,2,3}; //Date为一个结构体
ofstream tfile(“date.dat”, ios_base :: binary);
tfile.write((char *) &dt, sizeof dt);
tfile.close();
5、seekp和tellp
seekp设置指向输出文件流下一次写数据的位置的指针,tellp成员函数返回该文件位置指针值。
6、错误处理函数
bad fail good eof clear rdstate
二进制输出文件:
最初设计流的目的是永远文本,因此默认的输出模式是文本方式。在以文本模式输出时,如果遇到换行符便自动扩充为回车换行符这种自动扩充有时可能出现问题。这时,可以使用二进制模式输出到文件:
ofstream tfile(“date.dat”, ios_base :: binary);
tfile.write((char *) &dt, sizeof dt);
输入流:
一个输入流类对象时数据流出的源头,三个最重要的输入流类是 istream ifstream 和 istringstream。
构造输入流对象:
如果仅使用cin对象,则不需要构造输入流对象如果要使用文件流从文件中读取数据,就必须构造一个输入流对象:
1、使用open打开文件:
ifstream myFile;
myFile.open(“filename”,iosmode);
2、在构造函数中指定文件名和模式:
ifstream myFile(“filename”,iosmode);
使用提取运算符:
提取运算符(>>)对所有标准C++数据类型都是预先设计好的,它是从一个输入流对象获取字节最容易的方法。
提取运算符是用于格式化文本输入的,在提取数据时,以空白符为分隔。要输入包含空格的文本,可以使用非格式化输入成员函数getline()。
输入流成员函数:
1、输入流的open函数 2、输入流的close函数 3、get函数:
cin.get();
4、getline函数:
char line[100];
cin.getline(line,100,’t’); //连续输入一串字符,遇到‘t’时停止,字符个数最多不超过99个
cout << line;
5、read函数:
read成员函数从一个文件读字节到一个指定的存储器区域,由长度参数确定要读的字节数。
ifstrem is(“payroll”,ios_base::binary);
if(is){
is.read((char *)&employee1, sizeof(employee1)); //employee1为一个结构体变量
} else {
cout << “ERROR: cannot open file ‘payroll’.” << endl;
}
is.close();
6、seekg和tellg函数
在输入文件流中,保留着一个指向文件中下一个将读数据的位置的内部指针,可以用seekg函数来设置这个指针。
tellg成员函数返回当前文件读指针的位置,这个值时streampos类型。