手机铃声的文件都是一些特殊格式,我们将它以char型存在sql server数据库中。写入数据库中是一个byte一个byte写的,可现在我不知道怎么去读出它来了。
文件内容如下
~| BEGIN:IMELODY
VERSION:1.2
FORMAT:CLASS1.0
MELODY:*3g3g3*4c3c3e3g3d3c3e1d2c3e3d3c3*3h2a3g3g1*4c2c3d3e3g3d3
END:IMELODY如果 memcpy(szUserData2,(char *) _bstr_t(pRstStores->Fields->GetItem("msg")->Value),len) ;
之类的方法只能取到头三位字符(因为他有结束符)
我不知道怎样在毫不改变的将它完整取出,还望高手指点!
文件内容如下
~| BEGIN:IMELODY
VERSION:1.2
FORMAT:CLASS1.0
MELODY:*3g3g3*4c3c3e3g3d3c3e1d2c3e3d3c3*3h2a3g3g1*4c2c3d3e3g3d3
END:IMELODY如果 memcpy(szUserData2,(char *) _bstr_t(pRstStores->Fields->GetItem("msg")->Value),len) ;
之类的方法只能取到头三位字符(因为他有结束符)
我不知道怎样在毫不改变的将它完整取出,还望高手指点!
下面是我的使用VARIANT,SAFEARRAY,SAFEARRAYBOUND的例子:
CFile file;
if (!file.Open (filename ,CFile::modeRead))
return 2;
DWORD filesize=file.GetLength ();
char *m_pBuffer;
m_pBuffer=new char[filesize+1];
if (file.ReadHuge (m_pBuffer,filesize)!=filesize)
return 1;
char* pwritebase=m_pBuffer;
VARIANT varBlob;
SAFEARRAY* psa;
SAFEARRAYBOUND safebound[1];
if(pwritebase)
{
safebound[0].lLbound =0;
safebound[0].cElements =filesize;
psa=SafeArrayCreate(VT_UI1,1,safebound);
for (long i=0;i<(long)filesize;i++)
SafeArrayPutElement(psa,&i,pwritebase++);
varBlob.vt =VT_ARRAY | VT_UI1;
varBlob.parray =psa;
}
sqltext="insert into ";
sqltext+=(_bstr_t)tablename;
sqltext+=" (id,parentid,bedelete,data) values (?,?,0,?)";
m_commandptr.CreateInstance (__uuidof(Command));
m_commandptr->ActiveConnection =papp->m_pConnection ;
m_commandptr->CommandText =sqltext;
m_commandptr->CommandType =adCmdText;
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("tableitemid",adInteger,adParamInput,4,COleVariant((short)tableitemid)));
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("parentid",adInteger,adParamInput,4,COleVariant((short)pitem->parentid )));
m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("data",/*adLongVarBinary*/adVarBinary,adParamInput,filesize+1,varBlob));
m_commandptr->Execute (NULL,NULL,adCmdUnknown); delete []m_pBuffer;
现在能按位的写进去,只是不知如何读出来。不知您还能否提供一点读出的代码?有劳了