Microsoft KB Archive/246934

From BetaArchive Wiki
Knowledge Base


Article ID: 246934

Article Last Modified on 7/30/2001

This article was previously published under Q246934

SYMPTOMS

The istream::readsome function does not read correct data from a file.

CAUSE

The basic_istream::readsome function has some limitations when used on certain streams. Moreover, the MSDN documentation for basic_istream::readsome states that internally basic_istream::readsome calls the read function. However, in the basic_istream::readsome implementation, the read function is never called.

RESOLUTION

Give preference to basic_istream::read.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

Here is a code sample that illustrates the problem and provides a workaround:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream file("c:\\config.sys",ios::in|ios::binary);

    static char buffer[10];
    buffer[10] = 0;

    if ( !file )
        cout << "unable to open file" << endl;
    else
    {
        file.readsome(buffer,10); // It does not work properly.
        //file.read( buffer, 10 ); // Uncomment this line for work around.
        cout << buffer << endl;

        cout << endl << "File contents are:" << endl;
        file.seekg( 0 );    // Rewind file.
        while( file.good() )
        {
            file.getline( buffer, 10 );
            cout << buffer << endl;
        }
    }
    return 0;
}

                


Additional query words: stl

Keywords: kbbug KB246934