Export (0) Print
Expand All

ReadValueChunk

This method will read up to a maximum of the specified chunk size (as available) from the value of the current node and copy the value into the specified buffer.


HRESULT ReadValueChunk ([in] WCHAR * pBuffer, [in] UINT cwhChunkSize, [out] UINT * pcwchRead);

pBuffer

You must pass in a buffer that is at least cwhChunkSize characters long. The value of the token will be read into the buffer.

cwhChunkSize

The chunk size required, in characters. Any value from 0 to 4G is valid for chunk size.

pcwchRead

The size of the string read. This argument cannot be NULL.

Returns S_OK if no error is generated. Returns E_PENDING if the data is unavailable, and the stream is paused. Returns S_FALSE if no more content is available to be read.

The size of the buffer should be greater than or equal to that of the specified chunk size.

If the remaining value is shorter than the required chunk size, the method will return only the remaining value and notify the call through the pcwchRead argument of its size.

This method will not span a surrogate pair. When the number of characters requested would split a surrogate pair, this method returns one fewer WCHAR than the number requested.

If the content is temporarily unable to be read this method returns E_PENDING and does not move forward.

The following code reads a chunk of a value:

while (TRUE)
{
    hr = pReader->ReadValueChunk(buff, buffSize - 1, &charsRead);
    // This is a sample of how one might handle E_PENDING
    if (E_PENDING == hr){
        // Alert user to the pending notification
        wprintf(L"Error pending, error is %08.8lx", hr);

        // As long as E_PENDING is returned keep trying to read
  while (hr == E_PENDING){
            ::Sleep(1000);
            hr = pReader->ReadValueChunk(buff, buffSize - 1, &charsRead);
  }
    }
    if (S_FALSE == hr || 0 == charsRead)
        break;
    if (S_OK != hr)
    {
        wprintf(L"\nXmlLite Error: %08.8lx\n", hr);
        return -1;
    }
    buff[charsRead] = L'\0';
    dotWhiteSpace(buff, charsRead);
    wprintf(L"attribute chunk size:%d >%s<\n", charsRead, buff);
}

Header: XmlLite.h

Library: XmlLite.lib

Show:
© 2014 Microsoft