0

ファイルから読み取るために fin.getline() の複数の呼び出しを使用する関数 func1(ifstream& fin) があります。この func1 内で、func1 がアクセスしているのと同じファイルにアクセスする必要がある別の関数 func2(ifstream&) も呼び出します。func2 を単に func2(fin) として呼び出すことができます。

ここで、func1 が 4 行目までファイルを読み取り、次に func2 が呼び出されて、7 行目までファイルを読み取るとします。これが問題です。funct2 が func1 に戻るとすぐに、ファイルの読み取りを続行したいと思います。 func1 が残した場所、つまり 5 行目ですが、fin がファイルの 8 行目を「指している」ため、それは不可能です。

func2 を func2(const ifstream&) および func2(const ifstream*) として定義するか、func1 内に fin のコピーを作成して func2 に渡すことは既に試みましたが、コンパイラはこれらのオプションを受け入れません。

私は何をすべきか?ありがとう。

4

1 に答える 1

2

通常、「戻りたい」場合fstream::tellg()は、現在の場所を伝え、fstream::seekg()その時点に戻るために使用します。

私が通常好むもう 1 つのオプションは、行を 1 回だけ読み取り、必要な領域を行き来できる十分な行を保持する行のキャッシュ/ストアを用意することです。ファイルが絶対に巨大ではないと仮定すると、すべての行をベクトルに保持することはかなりうまく機能します。ファイルが数ギガバイトの場合、それはオプションではない可能性があります (組み込みデバイスでは、数メガバイトでもすべてを保持するには多すぎる場合があります)。その場合、不要になったものを「破棄」する何らかの方法を使用する必要があります。 .

于 2013-07-09T21:58:03.883 に答える