0

ファイル内の行を消去したい。ファイルの内容を(たとえばベクトルで)保存し、行を消去して再度書き込むことができることを私は知っています。ただし、ファイルが大きくなると非常に面倒で、あまり効率的ではありません。

より効率的でエレガントな方法を知っている人はいますか?

4

3 に答える 3

2

ディスク ファイルについて特に魔法のようなことは何もありません。データを連続した領域 (通常は「ブロ​​ック」のようなものと呼ばれます) に格納することを依然として好みます。これらの領域の真ん中にデータのない穴を残す方法はありません。したがって、これらの領域の 1 つの中央から 3 バイトを「削除」したい場合は、その領域の他のすべてを 3 バイト戻すことによって、どこかでこれを達成する必要があります。いいえ、効率的ではありません。

これが、テキスト エディター (この種の作業を頻繁に行う必要がある) が、データの移動がはるかに高速な RAM に (すべてではないにしても) できるだけ多くのファイルをロードする傾向がある理由です。通常は、要求されたとき (または定期的に) 変更をディスクに書き戻すだけです。このような多くの変更を加える必要がある場合は、彼らの本からページを取り出して、同様のことを行うことをお勧めします.

于 2011-05-27T16:09:52.310 に答える
0

BerkeleyDB(dbopen(3))には、DB_RECNOと呼ばれるアクセスメソッドがあります。これにより、任意の種類のレコード区切り文字を使用して、任意の長さのファイルを操作できます。デフォルトでは、区切り文字としてUNIX改行を含む可変長レコードが使用されます。次に、整数インデックスを使用して各「レコード」にアクセスします。これを使用して、テキストファイルから任意の行を削除できます。これはC++に固有のものではありませんが、ほとんどのUnix / Linuxシステムを使用している場合、このAPIはすでに利用可能です。

于 2011-05-27T20:07:58.763 に答える