IO流

设备:1、文件

​ 2、控制台

​ 3、特点的数据类型(stringstream)

C++中必须通过已定义好的类来处理IO(输入和输出)

1、文件流

文件流:对文件的输入输出

头文件:fstream

类库: istream:对文件的输入(读文件)

​ ostream:对文件的输出(写文件)

​ fstream:对文件的输入输出

2、对文件的读写

文件的打开方式:

模式标志描述ios::in读方式打开文件ios:out写方式打开文件ios::trunc如果此文件已经存在, 就会打开文件之前把文件长度截断为0ios::app尾部最加方式(在尾部写入)ios::ate文件打开后, 定位到文件尾ios::binary二进制方式(默认是文本方式)

以上打开方式, 可以使用位操作 | 组合起来

3、文件简单操作

,open打开文件.close关闭文件.eof()判断是否结束.open(ios::binary)打开二进制文件.write((char*)&age, sizeof(age))–(假如输入年龄)写二进制文件.read((char*)&age, sizeof(age))读二进制文件.is_open( )文件流是否打开成功.fail( )流的failbit或者badbit被置位时, 返回trufailbit出现非致命错误,可挽回, 一般是软件错误badbit出现致命错误, 一般是硬件错误或系统底层错误, 不可挽回.bad( )badbit置位时, 返回true.good( )处于有效状态时, 返回true.clear( )所有状态都被复位

4、格式流输入输出文件

写文件:

ofstream outfile;

stringstream s;

s << "name:" << name << "age:" << age << endl;

outfile << s.str();

读文件:

string line;

ifstream infile;

getline(infile, line);//读一行

sscanf_s(line.c_str(), "name:%s age:%d", name, sizeof(name),&age);//用C语言方式,必须与写文件格式一直,否则出现异常

cout << "name:" << name << "age:" << age << endl;

5、文件流定位

1、seekg

seekg( off_type offset, //偏移量

ios::seekdir origin ); //起始位置

作用:设置输入流的位置

参数1: 偏移量

参数2: 相对位置

beg 相对于开始位置

cur 相对于当前位置

end 相对于结束位置

infile.seekg(-50, infile.end);//从最后读50个

2、tellg

返回该输入流的当前位置(距离文件的起始位置的偏移量)

// 先把文件指针移动到文件尾

infile.seekg(0, infile.end);

3、seekp

设置该输出流的位置

outfile.seekp(4, outfile.beg);

6、小计

count常常取:

std::numeric_limitsstd::streamsize::max() 相当于IO流的最大字符个数

常见用法:(把标准输入缓冲区cin的所有数据都清空)

cin.ignore(std::numeric_limits::max(), ‘\n’);

// 如果输入错误, 需要反复重复输入

while (cin.fail()) {

cin.clear(); //清除错误标志

//cin.sync(); 在vs中无效

// 把cin的输入缓冲区中的数据全部清除,直到遇到回车符

cin.ignore(std::numeric_limits::max(), '\n');

cout << "输入错误,请重新输入:";

cin >> num;

}

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: