1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| std::vector<unsigned char> CObjetMetier::BlobToBlobVector(const OBlob & m_blob)
{
std::vector<unsigned char> vectorResult;
short status= OLOB_NEED_DATA;
int PositionFichier = 0;
unsigned long size;
unsigned long optchunk;
unsigned int bufsize;
size = m_blob.GetSize();
vectorResult.resize(size);//taille le vecteur à la taille maximum du blob
// calcul de la taille du buffertemporaire optimale
optchunk = m_blob.GetOptimumChunkSize();
bufsize = ((int)(32768/optchunk)) *optchunk;
if (bufsize > size) bufsize = size;
unsigned char *BufferTmp = new unsigned char[bufsize];
unsigned long NbLue=0;
while(status == OLOB_NEED_DATA)
{
NbLue = m_blob.Read(&status, BufferTmp, bufsize );
//blindage, au cas ou l'on dépasse la grandeur du vector
if (PositionFichier + NbLue >vectorResult.size())
{
vectorResult.resize(PositionFichier + NbLue);
}
for(int i=0 ; i < NbLue ; ++i) vectorResult[PositionFichier + i] = BufferTmp[i];
PositionFichier += NbLue;
}
vectorResult.Resize(PositionFichier );//met le nombre d'element à la taille du fichier
return vectorResult;
} |