2009-04-08 19 views
1

を働いていない私は私のwhile条件のために偽のブールbValue =を使用する必要があるかもしれないと思う:はifstream object.eof()

char cArray[ 100 ] = ""; 
ifstream object; 
cout << "Enter full path name: "; 
cin.getline(cArray, 100); 
if (!object) return -1 // Path is not valid? This statement executes why? 

ifstream object.open(cArray, 100); 

// read the contents of a text file until we hit eof. 
while (!object.eof()) 
{ 
// parse the file here 

} 

は、なぜ私は、テキストファイルのフルパス名を入力することはできませんか?

これはeofの可能性があります。 eofをエミュレートできるブールステートメントの構文はありますか?

は私が持つことができます。

while (!object == true) 
{ 
// parase contents of file 
} 
+0

あなたが何らかの形でエラーをオーバーライドしない限り、あなたは、C++コンパイラでは、このコードをコンパイルしませんでした。実際にコンパイルしたものから再入力しましたか?おそらく、問題があったコードをコピー&ペーストしてください。 –

答えて

-1

ifstream::open機能は、ファイル名とオプションのモードを取ります。あなたはファイル全体を読みたいので、なぜちょうど初めで起動しない:もちろん

ifstream obj(cArray); 
if (obj) { // file successfully opened for reading 
    while (obj.good()) { 
     // read in a line at a time 
     string line; 
     getline(line, obj); 
     if (!line.empty()) { // we have something to work with 
      // parse 
     } 
    } 
} 

、スマートなバージョンは、ニールバターワースとしてwhileループにgetlineをテストすることです。

+0

私はちょうどファイルパス全体を読むことができないと思う。実際にはeofの問題ではないかもしれない。 – user40120

+0

@lampshade:あなたのバッファcArrayがファイルパスに十分な大きさであるかどうかチェックする。 – dirkgently

+0

これは本当に良い考えではありません - getlineが何も読み取れない場合でも "解析"が呼び出されます。 –

7

テキストファイルを読む正しい方法では、eof()、good()、bad()、またはindifferent()関数を使用する必要はありません(OK、最後に作った1つアップ)。同じことがC言語でも当てはまります(fgets()、feof()など)。基本的に、これらのフラグは、getline()のような関数を使って、何かを読み込もうとしたときにのみセットされます。 getline()のような読み込み関数が実際に何かを直接読み取ったかどうかをテストする方がはるかに単純で正しいかもしれません。

テストされていない - 私は私のコンパイラをアップグレードしています:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespacr std; 

imt main() { 

    string filename; 
    getline(cin, filename); 

    ifstream ifs(filename.c_str()); 
    if (! ifs.is_open()) { 
     // error 
    } 

    string line; 
    while(getline(ifs, line)) { 
     // do something with line 
    } 
} 
+0

私はsenteinal controlled conditionを使用できますか?あなたのgetline(ifs、line)のInsted? – user40120

+0

"senteinal"の意味を理解できません –

+0

http://ja.wikipedia.org/wiki/Sentinel_value –