将文本文件读入Safearray

时间:2010-03-18 10:41:11

标签: c++ file-io safearray

我需要读取文本文件并将数据存储到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;
}

问题是文件的大小比读取的字节大......

有什么问题?

问候 camelord

1 个答案:

答案 0 :(得分:0)

man-page中所述,读取尝试读取计数字节。为了确保你读取所有字节,你必须循环。

作为旁注:您并不总是保证使用静态文件,因此假设文件大小不会改变可能会让您遇到麻烦(缓冲区溢出,不读取完整文件,无休止循环)。