3

大きなテキストファイルがあります。
プログラムを実行するたびに、最初の行を読み取って削除し、そのデータをファイルの末尾に戻す必要があります。

ファイルのすべての部分を読み込まずにこのタスクを実行する方法はありますか?
次の疑似コードの例に従うことは素晴らしいことです。

1. Open file stream for reading/writing
2.   data = first line of file
3.   remove first line from file  <-- can I do this?
4. Close file stream

5. Open file stream for appending
6.   write data to file
7. Close file stream

すべてを読み込もうとしない理由は、プログラムが毎日特定の時間に実行されるためです。ファイルが大きくなるたびに遅延を長くしたくありません。

私が見つけたすべての解決策では、プログラムがファイル全体を処理する必要があります。C++ ファイルストリームがこれを達成できない場合は、C++ プログラムを実行するための迅速かつ効率的な代替手段を用意しています。
ありがとう。

4

1 に答える 1

5

残念なことに、最近のOSではこれを行うように設計されたファイルシステムはありません。ファイルの先頭から何かを削除する唯一の方法は、最初のビットを除いて、内容を新しいファイルにコピーすることです。やりたいことを正確に行う方法はありません。

しかし、うまくいけば、少し再設計することができます。たぶん、各エントリはデータベース内のレコードである可能性があります。そうすれば、並べ替えを非常に効率的に行うことができます。または、ファイルに固定サイズのレコードが含まれている可能性があり、インデックスの2番目のファイルを使用してレコードの順序を指定できるため、ファイルの再配置はインデックスの更新だけで済みます。

于 2012-05-14T02:03:27.607 に答える