我今天晚上一直在做一场噩梦,想要获得一些非常简单的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;
}
此代码处于错误修复模式'所以因此非常混乱,不要过于担心,当这种方法最终起作用时,就会发生清理。
我试过了:
我现在有点想法,我真的不确定为什么这个文件拒绝加载。
条件:if (!getline(m_ifs, line))
反复返回真...... :(
编辑:我刚刚在打开后立即检查m_ifs.fail()
并返回true,因此我们知道触发了失败标记:/
由于
盖
答案 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
。