ifstream.open()没有打开文件

时间:2016-08-29 19:45:03

标签: c++ file istream

我今天晚上一直在做一场噩梦,想要获得一些非常简单的I / O功能。令人尴尬的是,我在这里得到了很多人的帮助!

我目前的问题是我尝试使用ifstream.open()并且它只是没有打开文件。 getline确认了这一点(ifstream,line);在第一次通话时返回false。

以下是当前代码的复制粘贴:

std::string FSXController::readLine(int offset, FileLookupFlag flag)
{
    // Storage Buffer
    string line;
    streampos sPos(offset);

    try
    {
        // Init stream
        if (!m_ifs.is_open())
            m_ifs.open("C:\\Users\\guyth\\Documents\\test.txt", fstream::in);
    }
    catch (int errorCode)
    {
        showException(errorCode);
        return "";
    }

    // Set stream to read input line
    m_ifs.seekg(sPos);
    if (!getline(m_ifs, line))
        return "";

    // Close stream if no multiple selection required
    if (flag == FileLookupFlag::single)
        m_ifs.close();

    return line;

}

此代码处于错误修复模式'所以因此非常混乱,不要过于担心,当这种方法最终起作用时,就会发生清理。

我试过了:

  • 绝对文件路径
  • 将路径保存到字符串中,然后调用.c_str()方法。
  • 以管理员模式运行VS 2015
  • 确保文件具有读取/正确访问权限
  • 确保没有重复的文件扩展名
  • 是的,文件肯定有内容! :d

我现在有点想法,我真的不确定为什么这个文件拒绝加载。

条件:if (!getline(m_ifs, line))反复返回真...... :(

编辑:我刚刚在打开后立即检查m_ifs.fail()并返回true,因此我们知道触发了失败标记:/

由于

1 个答案:

答案 0 :(得分:3)

在打开流之前启用例外:

m_ifs.exceptions ( std::ifstream::failbit | std::ifstream::badbit );

否则m_ifs.open不会抛出。

你必须抓住std::ifstream::failure

  try {
    m_ifs.open("C:\\Users\\guyth\\Documents\\test.txt", fstream::in);
  }
  catch (std::ifstream::failure e) {
    std::cerr << "Exception opening file: " << std::strerror(errno) << "\n";
  }

有关详细信息,请参阅ios::exceptions