我正在尝试使用此代码打开二进制数据库
Store::Store(const char* filename)
{
ifstream inFile;
inFile.open(filename, ios::in | ios::binary);
if(!inFile){
cout << "Could not open file " << data << "!" << endl;
}
while( inFile ){
inFile.read((char*) this, sizeof(Store));
}
inFile.close();
我得到的错误是“无法打开文件”错误,我很难过。
答案 0 :(得分:4)
首先,data
可能应该是filename
。
最有可能的原因是您的应用程序的工作目录不在您认为的位置,并且该文件不存在。尝试使用绝对路径来检查是否是这种情况。
与问题无关:这种“保存”对象的方式非常不安全,并且高度依赖于编译器在内存中排列Store
个实例的方式。保存的存储很可能与使用其他编译器编译的程序版本不兼容,甚至可能与同一编译器的不同版本不兼容。
如果Store
有虚拟成员,您几乎可以保证崩溃。从技术上讲,无论如何都是不确定的行为。
您应该查看序列化不是整个对象,而是仅查看数据库的原始数据部分。查看boost.serialization
可能会有所帮助。
答案 1 :(得分:2)
您的代码对于访问文件似乎是正确的,我会确保文件路径是正确的,特别是如果它是相对路径。您可能在错误的工作目录中。此外,您可能没有读取文件的require权限,尝试使用admin / root权限运行(通常不是读取文件的情况,但值得一提)。
我会打印出工作目录和文件名,以确保所有内容都被正确引用。