from: http://blog.csdn.NET/zhtsuc/article/details/2938614

关于C++ fstream的一个容易使用出错的地方

关于c++ 中 文件流的两个类,ifstream 和ofstream,大家也许并不陌生。

其负责c++的文件输入流 和 文件输出流。基本上所以语言都会提供类似的文件输入流 和文件输出流类。

但当大家学习了Java,或者c#后,大家就很容易用错这个类,把三种语言混淆。

在java 和 c#中,关于打开输入文件流,或者输出流,都是通过抛出异常来标志打开失败。

而且大家对这种思想也很容易接受。

所以在c++中如下的错误使用很是常见。

  1. try
  2. {
  3. ifstream fin("filename");
  4. //TODO:
  5. }
  6. catch(exception)
  7. {
  8. cout << "fail to open file" << endl;
  9. }

其实c++的ifstream,ofstream和c#,java的文件流类在这一点上并不相同。

当文件打开失败或者其他错误时,并没有异常抛出。那读者就会想,“如何判断文件打开成功呢”。

因为肯定要确定文件打开成功,才能操作文件流对象。

如下为一般的正确使用方法。

  1. ifstream fin("filename");
  2. if (!fin)
  3. {
  4. cout << "fail to open the file" <<endl;
  5. return -1;//或者抛出异常。
  6. }
  7. else
  8. {
  9. cout << "open the file successfully" << endl;
  10. }

这时候有人又有疑问了。fin是一个ifstream对象,不可能是0,或者NULL啊。怎么会有!fin的这个判断语句成功呢。

正如我们所以疑问的,!fin并不是说判断fin是否为0或者为空。而是ifstream类重载了!操作符,所以当我们如此使用的时候,是!操作符函数返回一个bool变量来标记是否成功。

类似的对于ofstream也是如此。

其实在c++中,很多类都是通过重载操作符来完成一些转化的。读者可以常常留意。

other: http://blog.csdn.net/seadplus/article/details/7802346

fstream 中判断是否成功打开文件的更多相关文章

  1. Python中的用open打开文件错误,FileNotFoundError: [Errno 2] No such file or directory:

    学习python的文件处理,刚开始打开文件,代码如下 f = open('test_file.txt', 'r', encoding='UTF-8')RES = f.readlines()print( ...

  2. python中判断readline读到文件末尾

    fp = open('somefile.txt') while True: line = fp.readline() if not line: #等价于if line == "": ...

  3. 在Linux命令行中以图形化窗口打开文件夹

    Linux 系统中也有类似的命令.Ubuntu 发行版的命令行中,我们可以使用 nautilus 命令来打开指定目录的图形化窗口界面.类似下面命令这样使用: nautilus /home/testPr ...

  4. 总结C语言在嵌入式开发中应用的知识点(文件数据的加密与解密)

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  5. 使用JFileChooser打开文件

    -----------------siwuxie095                                 工程名:TestFileChooser 包名:com.siwuxie095.fi ...

  6. C#选择文件、选择文件夹、打开文件

    1.选择文件用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以 ...

  7. C/C++ 中判断某一文件或目录是否存在

    方法一:C++中比较简单的一种办法(使用文件流打开文件) #include <iostream> #include <fstream> using namespace std; ...

  8. 从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态

    一.文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二.打开文件 说 ...

  9. C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!

    https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...

随机推荐

  1. TCP的关闭,到底是几次握手,每次的标志位到底是什么!

    做题的时候遇到一个问题,TCP关闭的时候到底是三次还是四次握手,如果是三次,少了哪部分?   按照 <计算机网络> -第五版-谢希仁       然而对于TCP关闭, 有的地方能找到   ...

  2. Nagios check_logfiles插件的使用记录

    1 获取与安装 https://labs.consol.de/assets/downloads/nagios/check_logfiles-3.7.4.tar.gz 链接可能会失效,建议去官网下载. ...

  3. 《InsideUE4》-3-GamePlay架构(二)Level和World

    UE4深入学习QQ群: 456247757 引言 上文谈到Actor和Component的关系,UE利用Actor的概念组成一片游戏对象森林,并利用Component组装扩展Actor的能力,让世界里 ...

  4. ARM学习篇 中断定时理解

    1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●​若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...

  5. CF723D. Lakes in Berland[DFS floodfill]

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. codevs 1002 搭桥

    codevs 第一道题 先贴描述 1002 搭桥  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description ...

  7. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

  8. expect结合ssh遍历线上机器

    有个需求,有个文件删除了,但是不确定线上机器还都存不存在 #!/home/work/.jumbo/bin/expect -f set timeout - set mac [lindex $argv ] ...

  9. AFNetworking 与 UIKit+AFNetworking 详解

    资料来源 : http://github.ibireme.com/github/list/ios GitHub : 链接地址 简介 : A delightful iOS and OS X networ ...

  10. zookeeper多节点配置

    单机多节点模式 zookeeper解压, 放到 /opt/zookeeper/ 下, 同目录再放一个 server1目录, 下面建data和log两个目录用于存放数据和日志 zoo.cfg [milt ...