我在从berkeleyDB格式的文件中读取行时遇到了一些麻烦。我已经使用db_dump实用程序来显示文件中的内容并且有很多条目,但是当我尝试通过代码时,我只从光标返回一行(单个键和4个字节的数据) )
DatabaseEntry foundKey = new DatabaseEntry();
DatabaseEntry foundData = new DatabaseEntry();
LockingInfo lockInfo = new LockingInfo();
BTreeCursor cursor = db.DB.Cursor();
while (cursor.MoveNext(foundKey, foundData, lockInfo))
{
var kvp = cursor.CurrentMultiple;
var keyString = Encoding.Default.GetString(foundKey.Data);
var dataString = Encoding.Default.GetString(foundData.Data);
Console.WriteLine($"{keyString}: {dataString}"); // output: main: 0002
if(cursor.Count() > 1)
{
// count is always 1
Console.WriteLine($"There are duplicate records.");
}
}
cursor.Close();
db.DB.Close();
db.Environment.Close();
db_dump输出:
VERSION=3
format=bytevalue
database=main
type=btree
db_pagesize=8192
HEADER=END
0573262135f0b02634966b36b10c53c58fc6c3a2b8fff9e125be6ac3246..... (hundreds of lines)
DATA=END
知道我可能做错了吗?
答案 0 :(得分:0)
似乎我必须传递数据库名称才能读取游标中的数据。
打开数据库时,我最初使用的是以下内容:使用游标时只返回数据库头:
db = BTreeDatabase.Open(filename, dbConfig, txn);
当我应该使用时:
db = BTreeDatabase.Open(filename, "main", dbConfig, txn);