c++ - std::ifstream 初始值在未初始化时检查为真

标签 c++ stream

我意识到当我在没有初始化的情况下测试 std::ifstream 的值时,它检查为真。

如何初始化我的流,直到我打开我想使用的文件,检查才会返回 false?

(或者我不应该使用流的值来确定它是否打开?)

显示问题的小例子:

std::ifstream stream;

bool iWantToUseTheStream = false;

if (iWantToUseTheStream)
  stream.open(someFileName, std::fstream::in);

if (stream) // checks as true whether I opened the stream or not !
  std::cout << "I don't want this to print if I did not open the stream !";

最佳答案

您可以使用 is_open() 而不是检查整个流的状态。检查文件是否打开的成员函数。这将使您的代码看起来像

std::ifstream stream;

bool iWantToUseTheStream = false;

if (iWantToUseTheStream)
  stream.open(someFileName, std::fstream::in);

if (stream.is_open()) // is only true if there is an open file
  std::cout << "I will only print if the file is open";

关于c++ - std::ifstream 初始值在未初始化时检查为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52721666/

相关文章:

java - 进程卡在 java 中,即使我读过 (Input/Error)Stream,waitFor() 仍然需要很长时间

node.js - 是否可以从单个流字节范围 block 创建新的 mp4 文件?

java - eclipse 中的自动格式化程序

c++ - 指针变量,var 和 &var 的区别

c++ - 如何为 MSVC++ 2013 编译 Eigen?

c++ - 将std::ostringstream转换为std::stringstream

c# - 只读指定span

c++: 创建一个没有#include <iterator> 的 insert_iterator

c++ - 位移位和赋值

qt - 在 Windows 上的 QML 中播放 RTSP 视频