2010-03-18 11 views
1

J'ai besoin de lire un fichier texte et de stocker les données dans un Safearray.Lire le fichier texte dans Safearray

Je l'ai essayé avec cette fonction:

bool Parse::LoadTxtFileIntoSafearray(string* strPath, SAFEARRAY** pByteArray) 
{ 
bool bReturn = false; 

string line; 
int iOffset = 0; 
char* pcBuffer = NULL; 

std::ifstream infile (strPath->data()); 
if (!infile.fail()) 
{ 
    infile.seekg(0, std::ios::end); 
    int iSize = infile.tellg(); 
    infile.seekg(0); 
    pcBuffer = (char*)calloc(iSize,sizeof(char)); 
    if(pcBuffer) 
    { 
     infile.read(pcBuffer, iSize); 
     iSize = strlen(pcBuffer); 
     SAFEARRAYBOUND sb; 
     sb.cElements = iSize; 
     sb.lLbound = 0; 
     *pByteArray = SafeArrayCreate(VT_UI1,1,&sb); 

     BYTE* pData; 
     SafeArrayAccessData(*pByteArray,(void **)&pData); 
     memcpy(pData, pcBuffer,iSize); 
     SafeArrayUnaccessData(*pByteArray); 
     delete pcBuffer; 
     pcBuffer = NULL; 
     bReturn = true; 
    } 
} 
return bReturn; 
} 

Le problème est que la taille du fichier est plus grand que les octets lus ...

Quel est le problème?

concernant camelord

+0

hors sujet mais pourquoi utilisez-vous 'delete' avec' calloc'? – Naveen

+1

et qu'est-ce qu'un "safearray"? –

+0

aucune raison .. pourrait également créer un tampon local .. je le change. – camelord

Répondre

0

Comme mentionné dans le man-page, lisez les tentatives de lecture jusqu'à nombre octets. Pour être sûr de lire tous les octets, vous devez faire une boucle. En note: vous n'êtes pas toujours sûr de travailler avec un fichier statique, donc supposer que la taille des fichiers ne changera pas pourrait vous causer des problèmes (buffer-overrun, ne pas lire le fichier complet, boucle sans fin).

Questions connexes