我终于想出了如何将二进制文件读入ram,然后将其写入某个地方
ifstream::pos_type size;
char * memblock;
/* ...bunch of stuff... */
ifstream infile(filename1.c_str(), ios::in|ios::binary|ios::ate);
ofstream outfile(filename2.c_str(), ios::out|ios::binary);
if (infile.is_open())
{
size = infile.tellg();
memblock = new char [size]; //request mem allocation of that size
infile.seekg(0, ios::beg); //move to begining
infile.read(memblock, size);//read file
infile.close(); //close file
outfile.write(memblock,size);
outfile.close();
}
我还测试过它outfile.write(memblock,sizeof(memblock));
工作得很好所以我将它与 sqlite 一起应用,并通过将它存储在数据库中sqlite3_bind_blob(stmt,2,memblock,size,SQLITE_TRANSIENT);
以及与它一起使用的所有其他东西(如 htestep
等)逐步完成它。我能够从表与
sqlite3_prepare_v2(db,"SELECT Data, Size FROM table1",-1,&stmt,0);
sqlite3_step(stmt);
char * result = (char * )sqlite3_column_blob(stmt,0);
outfile.write(result,size);
这也很好用。但是,当我改用它时outfile.write(result,sizeof(result));
,它不起作用size - sizeof(result)
让我得到很大的数字(我只是在寻找一个 0 或不是大部分)所以我真的不知道它哪里出错了。是否将数据输入数据库错误?我检索数据是否错误?
我什至尝试添加另一列,然后插入size
并使用它,但由于某种原因似乎不起作用