文件流再探
来源:互联网 发布:sftp自定义端口号 编辑:程序博客网 时间:2024/05/18 16:16
来一小段代码:
#include<fstream>#include<iostream>#include<cstdlib>using namespace std;int main(){ ifstream in_stream; ofstream out_stream; in_stream.open("D:c++\infile.txt");//问题1 out_stream.open("outfile.txt"); int a, b; if(in_stream.fail()){ //问题2 cout << "failed" << endl; exit(1); } in_stream >> a >> b; out_stream << "a + b = " << (a+b) << endl; in_stream.close(); out_stream.close(); return 0;}
现在来看第一个小问题:
in_stream.open(“D:c++\infile.txt”);//问题1
1
调用成员函数open参数文件名的规范,我们知道,一个完整的文件名是包含这个文件的路径及其文件名的,现在我把完整的文件名作为参数,为什么会有错误?呵,仔细想想一个细节,\字符需要转义(\\)。
所以这里应当改回:
in_stream.open(“D:c++\\infile.txt”);//问题1正解
1
第二个重要的问题就是检查流操作的正确性:
if(in_stream.fail()){ //问题2 cout << "failed" << endl; exit(1); }
我们常常需要判断一个流对象是否成功连接到一个文件,因此,在一个流对象调用open之后总应该调用fail来测试,这也是一个必要的习惯。
成员函数fail不接受任何参数,返回一个bool类型。它的原型是bool ifstream::fail();和 bool ofstream::fail();。这样,能清楚地知道文件的连接是否到位。
接下来就说另一个重要的成员函数eof。用它来判断文件尾,它同样不接受任何参数,返回bool值。例如以下语句:
if(!in_stream.eof()){ cout << "Not done" << endl;}else cout << "file done" << endl;
至于为甚么需要预判文件尾,一个原因是在程序运行过程中,流对象从不返回来去读取已经读取过的内容,即像时间一样不去倒流。
最后补充一个关于输出文件的小技巧,你若想要把内容写入到一个已经存在的文件中,而且又不想覆写这个文件,只想把内容追加到文件尾,那么你可以这样调用open:
out_stream.open(“outfile.txt”,ios::app); //两个参数
1
这样你这次输出的内容会追加到outfile.txt(已经存在)的文件尾了。
END
0 0
- 文件流再探
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- 文件
- The dependency `第三方SDK` is not used in any concrete target.
- SSH反向代理
- Java8中你可能没听过的10个新特性
- 坑.51nod-1347 旋转字符串
- 正确对待bug
- 文件流再探
- 10.2
- (Leetcode)10.Regular Expression Matching(hard)
- CSS3快速上手之3:边框的圆角
- win10 的这一版改动好大
- 安全测试概述
- shell三大文本处理工具grep、sed、awk心得
- 【NOIP2016提高A组五校联考4】label
- 数据结构讲题