StreamReader::Read Method (array<Char>, Int32, Int32)
Reads a specified maximum of characters from the current stream into a buffer, beginning at the specified index.
Assembly: mscorlib (in mscorlib.dll)
public: virtual int Read( [InAttribute] [OutAttribute] array<wchar_t>^ buffer, int index, int count ) override
Parameters
- buffer
- Type: array<System::Char>
When this method returns, contains the specified character array with the values between index and (index + count - 1) replaced by the characters read from the current source.
- index
- Type: System::Int32
The index of buffer at which to begin writing.
- count
- Type: System::Int32
The maximum number of characters to read.
Return Value
Type: System::Int32The number of characters that have been read, or 0 if at the end of the stream and no data was read. The number will be less than or equal to the count parameter, depending on whether the data is available within the stream.
| Exception | Condition |
|---|---|
| ArgumentException | The buffer length minus index is less than count. |
| ArgumentNullException | buffer is nullptr. |
| ArgumentOutOfRangeException | index or count is negative. |
| IOException | An I/O error occurs, such as the stream is closed. |
This method overrides Read.
This method returns an integer so that it can return 0 if the end of the stream has been reached.
When using the Read method, it is more efficient to use a buffer that is the same size as the internal buffer of the stream, where the internal buffer is set to your desired block size, and to always read less than the block size. If the size of the internal buffer was unspecified when the stream was constructed, its default size is 4 kilobytes (4096 bytes). If you manipulate the position of the underlying stream after reading data into the buffer, the position of the underlying stream might not match the position of the internal buffer. To reset the internal buffer, call the DiscardBufferedData method; however, this method slows performance and should be called only when absolutely necessary.
This method returns after either the number of characters specified by the count parameter are read, or the end of the file is reached. ReadBlock is a blocking version of Read.
For a list of common I/O tasks, see Common I/O Tasks.
The following code example reads five characters at a time until the end of the file is reached.
using namespace System; using namespace System::IO; int main() { String^ path = "c:\\temp\\MyTest.txt"; try { if ( File::Exists( path ) ) { File::Delete( path ); } StreamWriter^ sw = gcnew StreamWriter( path ); try { sw->WriteLine( "This" ); sw->WriteLine( "is some text" ); sw->WriteLine( "to test" ); sw->WriteLine( "Reading" ); } finally { delete sw; } StreamReader^ sr = gcnew StreamReader( path ); try { //This is an arbitrary size for this example. array<Char>^c = nullptr; while ( sr->Peek() >= 0 ) { c = gcnew array<Char>(5); sr->Read( c, 0, c->Length ); //The output will look odd, because //only five characters are read at a time. Console::WriteLine( c ); } } finally { delete sr; } } catch ( Exception^ e ) { Console::WriteLine( "The process failed: {0}", e ); } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.