时间:2021-07-01 10:21:17 帮助过:5人阅读
法二:利用get成员函数
ifstream fin("source.dat"); //get里边传入什么参数,就把流的内容输入到什么里边,这是输入流的基本概念 while (!fin.get(*cout.rdbuf()).eof()) { // extract a line input if (fin.fail()) // blank line fin.clear(); cout<<char(fin.get()); // extract ‘\n‘ }
代码解释:由于上面代码中的get版本在遇到‘\n‘字符时,结束提取,所以需要用循环实现整个文件内容的输出。另外,当此版本get函数遇到空行 时,因为没有提取到任何字符(注意:get不提取回车符),注意会设置失败标志ios::failbit,所以此时应当调用clear()函数清除错误标 志。同样,因为该版本get不会提取回车符,所以需要用另一版本的get()提取回车符。
法三:利用重载的get函数
ifstream fin("main.cpp"); fin.get(*cout.rdbuf(), EOF);
代码解释:这个版本的get成员函数可以自定义提取终止符。这里通过设置为文件结束符(EOF)来达到一下提取整个文件的目的。
当然,你可以把上面的cout换成任意的输出流,比如文件输出流,从而可以实现文件的拷贝功能。
另外,上面代码中并没有使用输入流的>>操作符,因为>>和<<是相对的,只是把操作数交换一下位置罢了。因此,你 可以把上面代码中用out<<
[转]c++流缓冲---rdbuf()
标签:输入输出 文件流 get 自定义 fail -- 标准 code 派生