1

ファイルを1行ずつ読みたい。のようなことをしました

void Parse (string filepath) {
    ifstream sourceFile;
    sourceFile.open(filepath);
    for (string line; getline(sourceFile, line);) {
        cout << "1" << endl;
        cout << line << endl;
    }
}

int main() {
    Parse("C:\\test.txt");

    getchar();
    return 0;
}

次に、テキストを に入れますがC:\test.txt、実行しても何も得られません。なんで?「1」すらありません。ファイルが存在しない場合でも、例外はありません。問題の兆候だと思いますか?

4

3 に答える 3

3

成功/エラーを手動で確認する必要があります。試してみてくださいifstream::good()

sourceFile.open(filepath);
if(!sourceFile.good()) {
  // do something

手動で確認したくない場合は、例外を有効にすることができます。

// call that before open()
sourceFile.exceptions ( ifstream::failbit | ifstream::badbit );
于 2012-10-22T14:46:22.443 に答える
2

ファイルを開くのに問題があると思います。私は2つのことを提案します:

  • sourceFile が正常に開かれたかどうかを確認します( if (sourceFile))
  • コードをデバッグし、コードがたどるコード パスを確認します。

編集:人々がそれを見逃さないように、(単なるコメントではなく)私の回答に問題の実際の解決策を追加します:

ここでもう 1 つ考えてみます。プロパティでファイル名を確認してください。Windowsがファイルの拡張子を隠している場合、名前は実際にはtest.txt.txtですが、表示されるのはtest.txtだけです。

于 2012-10-22T14:48:33.820 に答える
0

forループをに変更します

for (string line; sourceFile.good();) {
    getline(sourceFile, line);

}

このようにして、for の条件部分でストリームの有効性をチェックし、ストリームが正常であれば行を取得します。

于 2012-10-22T14:48:05.567 に答える