テキストファイルを読み取るが、最初の行を2回読み取る単純なコードを作成しようとしています。これはこのようなものと同じくらい簡単だと思いました
std::ifstream file;
file.open("filename", std::ios_base::in);
std::string line;
std::getline(file, line);
// process line
file.seekg(0, ios::beg);
while (std::getline(file, line))
{
// process line
}
ただし、最初の行は 2 回処理されないため、seekg は失敗するはずです。理由はありますか?
注意: これは私が直面している問題ではなく、複数のクラス コードと複数の関数を貼り付ける必要がないように簡略化したものです。実際の問題は、ファイル ポインタが複数のクラスの複数の関数に渡されることに関係しています。最初の関数は呼び出される場合と呼び出されない場合があり、ファイルの最初の行を読み取ります。2 番目の関数はファイル全体を読み取りますが、ファイルの先頭にいることを確認するために、まず seekg を呼び出す必要があります。
上記のコードを使用して、説明を簡単にしました。