【问题标题】:Fstream Initialization in a Class - Checking if File Opened类中的 Fstream 初始化 - 检查文件是否打开
【发布时间】:2013-01-21 01:11:36
【问题描述】:

例子:

//头文件

class Example
{
    private:
            fstream InputObject;  

    public:
            Example();  

}

//实现文件

Example::Example():InputObject("file_name.txt", ios::in) {}

从我迄今为止从类似问题中读到的内容来看,在“旧”版本的 C++ 中,初始化类中的 fstream 对象的唯一方法是通过上面显示的成员列表初始化来实现。

问题:
如果这确实是在类中初始化 fstream 对象的“唯一”方式,那么如果文件无法打开,我们该怎么办?

通常我会通过检查运行 fstream 对象以确保它正确打开,但在这种情况下这似乎是不可能的。另外,即使我可以,如果第一次失败,我怎么能重新初始化对象?

【问题讨论】:

  • 如果您想再试一次,只需在正文中运行检查并使用.open()
  • fstream 对象有一个open() 成员函数...
  • 在 C++11 中添加的唯一内容(除了所有其他内容)是您现在可以直接将 std::string 参数用于 fstream...
  • @KerrekSB,我将其解释为类内成员初始化,尽管它没有修复检查或任何问题。
  • 所以我不能用.open“初始化”函数,但我可以尝试在构造函数的主体中使用.open“重新打开”它?

标签: c++ class exception-handling initialization fstream


【解决方案1】:
#define WIN32_LEAN_AND_MEAN // This makes it so it doesn't look through libs that are not included when running

#include <fstream> //To Read write to files, to be able to
#include <iostream> // The basic stuff, cout, cin, etc.
using namespace std; // the capability of typing cout instead of std::cout
int main() // our main loop
{
fstream InputObject; // declaring InputObject as something that can write to a file
if(!Inputobject.open("File Name Here") // if it cant open the file
{
cout << "File not Open" << endl; // then write to console, " File not Open"
}

return 0;
system("pause");
}

你想知道文件是否打开,所以使用 !在打开文件的函数之前意味着,未打开,因此带有!InputObject.open 的 if 语句将检查它是否未打开,如果是,则执行某些操作,因此 cout

【讨论】:

  • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。
猜你喜欢
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 2016-02-23
  • 2016-09-21
  • 2011-04-10
  • 2017-01-31
  • 2013-06-23
相关资源
最近更新 更多