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、failbit が設定され、fail()1 が返されます。すでにファイルの末尾にいるときに試行された変換また、failbit を設定します。

fail()が設定されている場合も 1 を返しbadbitます。これは、ファイルから特定のデータを読み取れないだけでなく、ファイル自体に重大な問題があることを示すように設定されています。

于 2012-04-18T18:05:56.263 に答える
1

許してください、私は単純な間違いを犯しました。ソース ファイルを Linux システムに移植したときに、スクリプトも移植しました。実行可能ファイルとスクリプトを混同していましたが、スクリプトにはディレクトリにないファイル名がハードコードされていました。

基本的に、そこにないファイルを誤って読み取ろうとしていました!

于 2012-04-18T18:07:05.497 に答える