C++ 在c+中读取大型二进制文件+;

C++ 在c+中读取大型二进制文件+;,c++,oracle,C++,Oracle,我正在尝试读取大小约为360kb的二进制文件(.dat格式),并将其插入oracle数据库的blob列中。我面临的问题是,我的代码没有插入完整的文件,而是只插入了部分文件。我想知道是否有任何方法可以读取大型二进制文件。此代码适用于小型二进制文件。。。这是我的密码 #include <iostream> #include <fstream> #include <string.h> #include <stdio.h> #include <occ

我正在尝试读取大小约为360kb的二进制文件(.dat格式),并将其插入oracle数据库的blob列中。我面临的问题是,我的代码没有插入完整的文件,而是只插入了部分文件。我想知道是否有任何方法可以读取大型二进制文件。此代码适用于小型二进制文件。。。这是我的密码

#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <occi.h>

using namespace oracle::occi;
using namespace std;


int main () {

Environment *env;
Connection *conn;
Statement *stmt;


env = Environment::createEnvironment (Environment::DEFAULT); 
try{
    conn = env -> createConnection("oracle", "oracle", "xxxxx"); 
    stmt = conn -> createStatement("insert into velodyne(name,info) VALUES(:x,:y)"); 
    stmt -> setInt(1,112);

    streampos size;
    char* memblock;
    ifstream fileIn ("filename", ios::in|ios::binary|ios::ate); 
        if (fileIn.is_open())
            {
                size = fileIn.tellg();
                cout<<"size of the file is:"<< size <<endl;
                memblock = new char [size];
                //cout<<"size of the memblock is:"<< memblock <<endl;
                fileIn.seekg (0, ios::beg);
                fileIn.read (memblock, size);
                fileIn.close(); 
            }

    Bytes *Data = new Bytes((unsigned char*) memblock, size); 

    stmt -> setBytes(2, *Data); 
    stmt -> executeUpdate();
    conn->commit();
    delete[] memblock;
        conn->terminateStatement (stmt);
}
    catch (SQLException ea)
     {
    cout<<ea.what();            
    }

Environment::terminateEnvironment (env);
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间oracle::occi;
使用名称空间std;
int main(){
环境*env;
连接*连接;
声明*stmt;
env=Environment::createEnvironment(Environment::DEFAULT);
试一试{
conn=env->createConnection(“oracle”、“oracle”、“xxxxx”);
stmt=conn->createStatement(“插入到velodyne(名称、信息)值(:x,:y)”中);
stmt->setInt(1112);
streampos大小;
char*memblock;
ifstream fileIn(“filename”,ios::in | ios::binary | ios::ate);
if(fileIn.is_open())
{
size=fileIn.tellg();

是否可以检查返回的内容
fileIn.good()
fileIn.gcount()
fileIn.read()
之后但在
fileIn.close()
之前?如果您的数据库API具有加载blob数据的函数,请使用该函数。@mauve fileIn.gcount()返回我试图插入的实际文件大小,但blob列仅显示文件的一部分execution@user4215256您确定数据库没有blob大小限制吗?
gcount()的值是多少
正在返回,最终blob的大小是多少?@mauve是的,我确定blob的大小限制。我们可以在blob中插入最大4GB。gcount()值为360kb(完整文件大小),但插入后blob只有33kb…我尝试插入断点,它在memblock处显示0xCCCC Bad ptr。。。。