C++ 在Oracle Berkeley DB中打开数据库环境时出现问题

C++ 在Oracle Berkeley DB中打开数据库环境时出现问题,c++,visual-c++,berkeley-db,C++,Visual C++,Berkeley Db,我是数据库新手,我写这个练习程序是为了测试伯克利BDB。打开环境时遇到问题-错误出现在我的控制台中,并显示: testEnv\_db.001: No such file or directory Error opening database environment DbEnv::open: No such file or directory 控制台程序的代码主要基于Berkeley DB Transactions guide中的示例,下面是程序的文本,直到出现错误为止,在int main下 很

我是数据库新手,我写这个练习程序是为了测试伯克利BDB。打开环境时遇到问题-错误出现在我的控制台中,并显示:

testEnv\_db.001: No such file or directory
Error opening database environment
DbEnv::open: No such file or directory
控制台程序的代码主要基于Berkeley DB Transactions guide中的示例,下面是程序的文本,直到出现错误为止,在int main下

很明显,该程序在try/catch块附近失败。我已经阅读了RTFM手册,但我无法理解它-DB_CREATE标志是为环境和数据库指定的,所以这里不应该有问题


有什么想法吗?

可能只是运行程序的目录中不存在testEnv目录?您必须自己创建环境主目录

此外,您可能希望在打开环境时指定DB_RECOVER

String^ key_allkeys  = "_ALLKEYS";
String^ key_valcount = "_COUNT";

// 1. Print some information to the screen, prompt user to enter path for key-value pair location:
Console::WriteLine("Oracle Berkeley DB Example Database Creator");
Console::WriteLine();
Console::WriteLine("Enter the path to the text file of key-value pairs:");
String^ kv_path = Console::ReadLine();

// 2. Declare initial variables:
String^ totalkeys;
int totalval;

// 3. Open the database:
u_int32_t env_flags = DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN; 
std::string envHome("testEnv");
u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT;
Db *dbp = NULL;
const char *file_name = "mydb.db";
DbEnv myEnv(0);
try 
{
    myEnv.open(envHome.c_str(), env_flags, 0);
    dbp = new Db(&myEnv, 0);
    dbp->open(NULL, file_name, NULL, DB_BTREE, db_flags, 0); 
} 
catch(DbException &e) 
{
    std::cerr << "Error opening database environment: " << std::endl;
    std::cerr << e.what() << std::endl;
    exc_block(); // Block
    return (EXIT_FAILURE);
}