无法打开文件C ++

时间:2013-09-26 17:38:12

标签: c++ ifstream

我正在尝试使用此代码打开二进制数据库

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();

我得到的错误是“无法打开文件”错误,我很难过。

2 个答案:

答案 0 :(得分:4)

首先,data可能应该是filename

最有可能的原因是您的应用程序的工作目录不在您认为的位置,并且该文件不存在。尝试使用绝对路径来检查是否是这种情况。

与问题无关:这种“保存”对象的方式非常不安全,并且高度依赖于编译器在内存中排列Store个实例的方式。保存的存储很可能与使用其他编译器编译的程序版本不兼容,甚至可能与同一编译器的不同版本不兼容。

如果Store有虚拟成员,您几乎可以保证崩溃。从技术上讲,无论如何都是不确定的行为。

您应该查看序列化不是整个对象,而是仅查看数据库的原始数据部分。查看boost.serialization可能会有所帮助。

答案 1 :(得分:2)

您的代码对于访问文件似乎是正确的,我会确保文件路径是正确的,特别是如果它是相对路径。您可能在错误的工作目录中。此外,您可能没有读取文件的require权限,尝试使用admin / root权限运行(通常不是读取文件的情况,但值得一提)。

我会打印出工作目录和文件名,以确保所有内容都被正确引用。