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.
Syntax
HRESULT ReadValueChunk ([in] WCHAR * pBuffer, [in] UINT cwhChunkSize, [out] UINT * pcwchRead);
Arguments
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.
Return Value
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.
Remarks
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);
}
Requirements
Header: XmlLite.h
Library: XmlLite.lib