我想打开一个文件

27   string tline;
28   ifstream finp; // input file
29   ifstream dinp; // data files
30
31   finp.open(argv[1]);
32
33
34   cout << "finp.good() = " << finp.good() << endl;
35   cout << "finp.bad() = " << finp.bad() << endl;
36   cout << "finp.fail() = " << finp.fail() << endl;

最后我得到了输出
finp.good() = 0
finp.bad() = 0
finp.fail() = 1

现在,除了这是一个内部逻辑问题之外,我找不到任何关于什么会导致这种情况的好文档。我该怎么做才能纠正这个错误?
如果有帮助的话,我在linux上运行,我需要同时包含<cstring><cstdlib>,而在OSX上运行时不需要这样做。这可能是问题所在吗?如果是,我该如何更正?

最佳答案

fail()将在尝试转换失败时返回1。例如,如果文件中的下一个字符不是数字,并且您试图读取int,则将设置故障位,并且fail()将返回1。在文件末尾尝试的任何转换也将设置故障位。
设置fail()时,badbit也将返回1。这意味着文件本身存在严重问题,而不仅仅是无法从文件中读取某些特定的数据。

08-27 16:37