特定の場所でファイルを開くか?

特定の場所でファイルを開くか?

64MBなどの特に大きなファイルがある場合は、ファイルの物理ハードドライブの場所を見つけて、特定のオフセットのバイトをファイルとして読み取ることができるかどうか疑問に思います。

ファイルの先頭で60MBオフセット100バイトに興味があるとしましょう。一部のアプリケーションレベルのeek()関数を使用している場合は、ファイルの先頭からファイルの終わりまで数百回のディスクスキャンを実行する必要がある非効率性は望ましくありません。

解決策はありますか?

とても感謝しています!

ベストアンサー1

seek()どのように行動すべきかについて誤解があるようです。中間バイトを読み取らずに、このオフセットのデータができるだけ効率的に格納される場所を見つけます。ブロックインデックスを検索するために複数のクエリ(おそらく数百回ではない)があります。

あなたができないことは、ファイルが開かれるときから次回開かれるまでのブロックインデックスの巡回を保存することです。オペレーティングシステムは、ファイルが最後に開かれてから変更または再配置されなかったことを覚えておく必要があります。

ファイルの内容は通常、隣接するディスクの場所にありません。ファイルは断片化される傾向があります。ファイルシステムは通常断片化を減らそうとしますが、通常これは保証されません。

おすすめ記事