7

我继承了一段代码,其中包含一个清空数据库的代码片段,如下所示:

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

这通常没问题,但有时在调用此清理代码之前数据库会变得非常大,并且通常是在用户想要做一些重要的事情时。

有没有更好的方法来做到这一点?

4

3 回答 3

10

您可以只删除该文件:

unlink $file;

由于dbmopen的第三个参数是文件模式,而不是文件模式,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 回答