ifstream.open()未打开文件

ifstream.open() not opening file

本文关键字:文件 open ifstream      更新时间:2023-10-16

今晚我做了一场噩梦,试图实现一些非常简单的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;
}

这段代码处于"bug修复模式",因此非常混乱,不用太担心,当这个方法最终工作时,会进行清理。

我试过:

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

我现在有点没主意了,真的不知道为什么这个文件拒绝加载。

条件:if (!getline(m_ifs, line))重复返回true…:(

编辑:我刚刚尝试在打开后立即检查m_ifs.fail(),它返回true,所以我们知道失败标志被触发了:/

感谢

Guy

在打开流之前启用异常:

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

相关文章: