Logo

StreamReader and StreamWriter

To handle text streams more easily, the .NET language has the StreamReader and StreamWriter classes. But these class do NOT inherit from Stream, they encapsulate it.

The StreamReader and StreamWriter classes derive respectively from TextReader and TextWriter which are designed to ease reading or writing text oriented streams.

Just like Stream, TextReader and TextWriter are abstract classes which exposes functionality that are implemented by it's inheritor. As all class implementing TextReader or TextWriter behave in the same way, we will consentrate on StreamReader and StreamWriter.

You can instanciate a StreamReader or a StreamWriter by passing a file name or a Stream to the constructor. Due to the fact that these classes are specially designed to handle texts, you can also construct an instance by passing it an encoding. By default, StreamReader and StreamWriter use the unicode encoding.

The following tables describe the properties and methods of those classes:

StreamReader
Object -> TextReader -> StreamReader
using System.IO;
Methods
Prototype Description
int Peek() Return the next caracter in the stream. Return -1 if no more caracter available.
int Read () Same as Peek but DO remove the caracter from the stream.
string ReadLine() Read the next line. A line is built of caracters and is ended by \n or \r. ReadLine return null if no more data is available
string ReadToEnd() Read the whole file
StreamWriter
Object -> TextWriter -> StreamWriter
using System.IO;
Properties
Name Type Description
AutoFlush bool In the case of a bufferized I/O, if AutoFlush is true, a write will be automatically affect the stream, not only the buffer
NewLine string Caracters of line ending. By default those caracters are \r\n
Methods
Prototype Description
void Flush() Force writing on the stream
void Write( args ) Write in the stream. args may be of any type.
void WriteLine( args ) Perform the same operation as Write but a new line is appended to the stream. This new line correspond to the string specified for the NewLine property.

The following example is divided in two parts. In the first part, a file is read using FileStream's methods; in the second part, the same file is read using a StreamReader

using System;
using System.IO;
using System.Text;

namespace StreamTest
{
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
// 1¬ ̈‚àû) Reading a text file using FileStream
FileStream fs = new FileStream("c:\\test.txt", FileMode.Open);
byte[] data = new byte[fs.Length];
fs.Read(data,0,(int)fs.Length);
fs.Close();

string fileContent = Encoding.ASCII.GetString(data);
Console.Write(fileContent);
Console.ReadLine();

// 2¬ ̈‚àû) Readind a text file using StreamReader
FileStream fs2 = new FileStream("c:\\test.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs2, Encoding.ASCII);
string fileContent2 = sr.ReadToEnd();
Console.Write(fileContent2);
Console.ReadLine();
}
}
}
Advantages Drawbacks
Easy text file access Do not inherit from Stream
Easy encoding management through Encoding class
Can be constructed around any Stream object, thus allowing binary reading/writing on any streaming source

Related articles:

Softec

Open-Source

Developers'Corner

Contacts & Legals

https://www.statuscake.com/App/button/index.php?Track=kuL1ynK5or&Days=7&Design=7

AltStyle によって変換されたページ (->オリジナル) /