Читать текстовый файл в Safearray - PullRequest
1 голос
/ 18 марта 2010

Мне нужно прочитать текстовый файл и сохранить данные в 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;
}

Проблема в том, что размер файла большечем прочитанные байты ...

Что не так?

С уважением, верблюд

1 Ответ

0 голосов
/ 18 марта 2010

Как упоминалось в справочной странице , чтение пытается прочитать до счетчика байтов. Чтобы быть уверенным, что вы прочитали все байты, вы должны выполнить цикл.

В качестве дополнительного примечания: вы не всегда гарантированно работаете со статическим файлом, поэтому допущение, что размер файла не изменится, может вызвать проблемы (переполнение буфера, не чтение полного файла, бесконечное петля).

...