是什么让ios :: fail()评估为1?

时间:2012-04-18 18:02:29

标签: c++ linux fstream

我正在尝试使用

打开文件
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上运行时我不需要这样做。这可能是问题吗?如果是的话,我该如何纠正呢?

2 个答案:

答案 0 :(得分:2)

当您尝试转换时,

fail()将返回1并且失败。例如,如果文件中的下一个字符不是数字,并且您尝试读取int,则会设置failbit,并且fail()将返回1.尝试进行任何转换你已经在文件的末尾也将设置failbit。

如果fail()已设置,则

badbit也会返回1。这设置为表示文件本身存在严重问题,而不仅仅是无法从文件中读取某些特定数据。

答案 1 :(得分:1)

原谅我,我犯了一个简单的错误。当我将我的源文件移植到linux系统时,我也移植了一个脚本。我将可执行文件与脚本混淆,脚本中有一个硬编码的文件名,不在目录中。

基本上,我不小心试图读取不存在的文件!