7

次のようにデータベースを空にするスニペットを含むコードを継承しました。

dbmopen (%db,"file.db",0666);
foreach $key (keys %db) {
  delete $db{$key};
}
dbmclose (%db);

これは通常は問題ありませんが、このクリーンアップ コードが呼び出される前にデータベースが非常に大きくなることがあります。これは通常、ユーザーが何か重要なことをしたい場合です。

これを行うより良い方法はありますか?

4

3 に答える 3

10

ファイルを削除するだけです:

unlink $file;

dbmopenの 3 番目の引数はundefではなくファイル モードであるためdbmopen、次に呼び出されたときにファイルが再作成されます。

dbmopen my %db, $file, 0666;
于 2008-10-13T14:10:33.680 に答える
6

実際、同僚が解決策を教えてくれました。あなたはどうやらできる:

dbmopen (%db,"file.db",0666);
%db = ();
dbmclose (%db);

データベースを閉じる前にハッシュをクリアします。

于 2008-10-13T05:58:18.633 に答える
6

何らかの理由で消えた別の回答がここにありましたが、より高速である可能性が高いため、再投稿しています(なぜ削除されたのかわかりません)。ファイルのリンクを解除して削除し、次のように空のデータベース ファイルを再作成する必要があります。

unlink ("file.db");
dbmopen (%db,"file.db",0666);
dbmclose (%db);
于 2008-10-13T06:50:54.673 に答える