0

我正在尝试打开一个文件

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 上运行时我不必这样做。这可能是问题吗?如果是这样,我该如何纠正?

4

2 回答 2

2

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

fail()当/如果badbit设置了,也将返回 1。这表明文件本身存在严重问题,而不仅仅是无法从文件中读取某些特定数据。

于 2012-04-18T18:05:56.263 回答
1

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

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

于 2012-04-18T18:07:05.497 回答