gpt4 book ai didi

c++ - 尽管在 catch block 中处理了适当的 eof 之后,我的代码在到达 eof 时会引发 basic_ios::clear 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:27 24 4
gpt4 key购买 nike

我的代码在到达 eof 并抛出异常时设置 std::failbit我怎样才能跳过eof异常

在 catch block 中,如果异常是因为 eof 但它不好,我会检查并跳过。

请建议我如何在下面的代码中跳过eof异常

std::ifstream in
std::string strRead;
in.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
try
{

while (getline( in,strRead))

{
//reading the file
}

catch(std::ifstream::failure & exce)
{
if(! in.eof()) // skip if exception because of eof but its not working?
{
cout<<exce.what()<<endl;
return false;
}


}
catch(...)
{

cout("Unknow exception ");
return false;
}

最佳答案

经过私下讨论,我们设法找到了解决他的问题的方法:getline(in, strRead) 会在达到 eof 时将 failbit 设置为 1(正常行为),而他没有希望发生这种情况。我们同意使用其他方法来读取文件的内容:

std::ifstream in(*filename*); // replace *filename* with actual file name.
// Check if file opened successfully.
if(!in.is_open()) {
std::cout<<"could not open file"<<std::endl;
return false;
}

in.seekg(0, std::ios::end);
std::string strRead;

// Allocate space for file content.
try {
strRead.reserve(static_cast<unsigned>(in.tellg()));
} catch( const std::length_error &le) {
std::cout<<"could not reserve space for file"<<le.what()<<std::endl;
return false;
} catch(const std::bad_alloc &bae) {
std::cout<<"bad alloc occurred for file content"<<bae.what()<<std::endl;
return false;
} catch(...) {
std::cout<<"other exception occurred while reserving space for file content"<<std::endl;
return false;
}

in.seekg(0, std::ios::beg);
// Put the content in strRead.
strRead.assign(std::istreambuf_iterator<char>(in),
std::istreambuf_iterator<char>());
// Check for errors during reading.
if(in.bad()) {
std::cout<<"error while reading file"<<std::endl;
return false;
}

return true;

关于c++ - 尽管在 catch block 中处理了适当的 eof 之后,我的代码在到达 eof 时会引发 basic_ios::clear 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45191850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com