削除する行数がわかっている場合は、ファイルから開始する場所(バイト単位)をどのように知ることができますか?

削除する行数がわかっている場合は、ファイルから開始する場所(バイト単位)をどのように知ることができますか?

read()特定の場所でファイルの作成を開始したいと思います。読み始める必要がある行の数はわかっていますが、read()は行を引数として使用せず、位置にバイトが必要です。

どの行から読み始めるかを知っていれば、どこから読み始めるかを計算するために使用できる方法はありますか?

答え1

どんなトリックもありません。ファイル内のバイトの開始位置を計算できるため、バイトをスキップするのは簡単です。ただし、各文字が改行文字であるかどうかを確認しない限り、可変長行に対して計算を実行することはできません。

本を想像してみてください。 42ページを探したいときは、見なくても42ページまで数えることができます。明確なページ厚のために定規を使用して42ページの位置を測定することもできます。ただし、第5章を見つけるには、すべてのページを見て、新しい章が始まる場所を確認する必要があります。

ファイルには行インデックスがないため、一部の行をスキップする実装を使用しても、行を見つけるためにバイト単位で読み取る以外にサーフェスの後に機会がないため、すべての行を削除して目的のread行を削除することもできます。スキップします。

答え2

すべてのバイトを読み取り、バイト10()の発生数を計算します\n。それNすぐ後ろにthが表示されます。N+1行。

残念ながら、これはトリックではなく、唯一の方法です。

そこはい レコード指向ファイルシステム行ごとの直接照会を許可するいくつかのプラットフォーム(例:仮想管理システムではそしてオペレーティングシステム)、しかし、これらのファイルシステムは、両方のプラットフォームで一般的ではありません。 Unix と POSIX はファイルをバイトストリームとして扱い、それ自体はこれらの基盤の追加抽象化を提供しません。

関連情報