在我的代码中,ifstream对象尝试打开一个失败的非现有文件,然后打开一个成功的现有文件。 然而,随后的读取失败。
如果在没有先前失败的情况下打开现有文件,则读取成功。
打开失败后我遗失了什么清理?
以下代码
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
char *buf = new char[10];
std::ifstream ifstr;
ifstr.open("ExistingFile.txt", std::ios_base::in | std::ios_base::binary);
std::cout << ifstr.is_open() << std::endl;
ifstr.read(buf, 4);
std::cout << ifstr.fail() << std::endl;
ifstr.close();
ifstr.open("NonExistingFile.txt", std::ios_base::in | std::ios_base::binary);
std::cout << ifstr.is_open() << std::endl;
ifstr.read(buf, 4);
std::cout << ifstr.fail() << std::endl;
ifstr.close();
ifstr.open("ExistingFile.txt", std::ios_base::in | std::ios_base::binary);
std::cout << ifstr.is_open() << std::endl;
ifstr.read(buf, 4);
std::cout << ifstr.fail() << std::endl;
ifstr.close();
return 0;
}
产生
1
0
0
1
1
1
答案 0 :(得分:3)
您可能需要在ifstr.clear();
之后添加ifstr.close();
以清除失败位。
答案 1 :(得分:3)
你应该清除(ifstr.clear())之前的错误
如果在关闭前清除流,ifstr.close()可能会设置ifstr失败标志。如果is_open()失败,请不要关闭流