我需要读取文本文件并将数据存储到Safearray中。
我用这个函数试了一下:
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;
}问题是文件的大小大于读取的字节.
怎么啦?
问候茶树
发布于 2010-03-18 10:53:48
正如在手册页中提到的,读取尝试读取向上计数字节。要确保读取所有字节,必须循环。
顺便提一句:您并不总是能够保证使用静态文件,所以假设文件大小不会改变,可能会给您带来麻烦(缓冲区溢出,没有读取完整的文件,无休止的循环)。
https://stackoverflow.com/questions/2469095
复制相似问题