素数の大きなリストをテキストファイルに保存しようとしています。プログラムを終了した場合、ファイルの行を読み取って、中断した場所を確認できる必要があります。ファイルのすべての行を最初に読み取らずに最後の行を読み取る方法がわかりません。
5 に答える
どちらもわかりません。最後の値を別のファイルに書き込み、その値を読み取って、どこから再開するかを知るだけです。
setg()を使用してファイルの最後にジャンプし、行の長さを推測することができます。ポイントとファイルの終わりの間に改行がある場合は、最後から2番目の行にいて、最後の行が何であるかを知っています。
しかし、Pete Beckersのソリューションの方がはるかに優れているので、代わりにそれを使用します。
あなたはあなたの数のバイトを計算することができます。
たとえば、5つの番号があり、最後の番号を読みたいとします。
1つの整数は4バイトです。したがって、fseekを使用してファイル内の4 * 4=16バイトを移動できます。その後、最後の行を読むことができます。
fseek(file、16、SEEK_SET);
SEEK_SETは、ファイルの開始を意味します。
ファイルの最後までシークし、改行文字が見つかるまで逆方向に読みます。これは、最後の行の先頭が見つかったことを意味します。
線の最大長がわかっている場合、これは簡単です。
この値を差し引いたファイルの終わりの場所であるポインタに移動するだけです。
そこから行の読み取りを開始し、それらをバッファーに入れます。前の文字が改行だったときにバッファをクリアする
ファイルが不足すると、バッファにファイルが含まれます。
最大長がわからない場合は、いつでもファイルを逆方向に読み取ることができます。