博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fstream 中判断是否成功打开文件
阅读量:5112 次
发布时间:2019-06-13

本文共 1003 字,大约阅读时间需要 3 分钟。

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

 

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

 

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

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

 

但当大家学习了,或者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

转载于:https://www.cnblogs.com/LonelyEnvoy/p/5940444.html

你可能感兴趣的文章
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
hihocoder1187 Divisors
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
Ubuntu下安装MySQL及简单操作
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
伪类与超链接
查看>>
centos 7 redis-4.0.11 主从
查看>>
博弈论 从懵逼到入门 详解
查看>>
永远的动漫,梦想在,就有远方
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
慵懒中长大的人,只会挨生活留下的耳光
查看>>