私は、ギガバイトのファイル内の選択されたデータへのある種の迅速なアクセスを提供することに直面しています。開始点を見つけると、その後のアクセスはシーケンシャルになります。ファイルには、各レコードの先頭に日付が含まれており、日付はファイル全体で増加します。最初から読み始めて、先頭の内容を無視してファイルを読みたくないのです。私は WINDOWS アプリケーションにのみ興味があります。ファイルをテキストモードで開きたいです。
64 ビットの fseek/ftell または fsetpos/fgetpos 関数を使用して、ある種のバイナリ検索を実行できることを思いつきました。改行で区切られたレコードの途中までシークする可能性があることは理解していますが、fgets 呼び出しを使用して部分的なレコードを単純にスキップできると考える人もいるでしょう。
fseek は元の SEEK_END メカニズムを提供するため、ファイル サイズを決定するために ftell を使用できるようです。fsetpos/fgetpos に同様の機能はありません。fsetpos/fgetpos を使用した場合、ファイル サイズを取得するにはどうすればよいでしょうか。
_fseeki64/_ftelli64 は int64 を使用し、fsetpos/fgetpos で使用される fpos_t も int64 であるため、ポインターに対して演算を実行できるはずです。
それとも、ここで間違った軌道に乗っていますか? 他のアプローチを検討する必要がありますか?