Bird
Raised Fist0
C Sharp (C#)programming~10 mins

StreamReader and StreamWriter in C Sharp (C#) - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - StreamReader and StreamWriter
Start
Open file with StreamWriter
Write text to file
Close StreamWriter
Open file with StreamReader
Read text from file
Close StreamReader
End
This flow shows writing text to a file using StreamWriter, then reading it back using StreamReader.
Execution Sample
C Sharp (C#)
using System.IO;

var writer = new StreamWriter("test.txt");
writer.WriteLine("Hello World");
writer.Close();

var reader = new StreamReader("test.txt");
var text = reader.ReadLine();
reader.Close();
Writes 'Hello World' to a file and then reads it back.
Execution Table
StepActionFile StateVariable ValuesOutput
1Open StreamWriter for 'test.txt'File opened for writing (empty)writer=open, reader=null, text=null
2WriteLine 'Hello World'File contains 'Hello World\n'writer=open, reader=null, text=null
3Close StreamWriterFile saved with 'Hello World\n'writer=closed, reader=null, text=null
4Open StreamReader for 'test.txt'File opened for readingwriter=closed, reader=open, text=null
5ReadLine from fileFile unchangedwriter=closed, reader=open, text='Hello World'
6Close StreamReaderFile closedwriter=closed, reader=closed, text='Hello World'
💡 StreamReader and StreamWriter closed, text read successfully.
Variable Tracker
VariableStartAfter Step 2After Step 5Final
writernullopenclosedclosed
readernullnullopenclosed
textnullnull'Hello World''Hello World'
Key Moments - 2 Insights
Why do we need to close StreamWriter before opening StreamReader?
Closing StreamWriter flushes and saves the data to the file. Without closing, StreamReader might read incomplete or no data. See execution_table steps 3 and 4.
What happens if we try to read from StreamReader before writing anything?
The file would be empty or not created, so StreamReader.ReadLine() returns null or empty. In our trace, writing happens before reading (steps 2 and 5).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'text' after step 5?
A'Hello World'
Bnull
CEmpty string
DThrows error
💡 Hint
Check the 'Variable Values' column at step 5 in execution_table.
At which step is the file content actually saved to disk?
AStep 4 - Open StreamReader
BStep 2 - WriteLine
CStep 3 - Close StreamWriter
DStep 6 - Close StreamReader
💡 Hint
Look at the 'File State' column; file is saved when StreamWriter is closed.
If we skip closing StreamWriter, what likely happens when opening StreamReader?
AStreamReader reads full text
BStreamReader reads partial or no text
CProgram crashes immediately
DStreamWriter closes automatically
💡 Hint
Refer to key_moments about why closing StreamWriter is important before reading.
Concept Snapshot
StreamWriter writes text to files; StreamReader reads text from files.
Always close StreamWriter to save data before reading.
Use WriteLine to write lines; ReadLine to read lines.
Remember to close both to free resources.
Simple way to save and load text data in C#.
Full Transcript
This example shows how to write text to a file using StreamWriter and then read it back using StreamReader in C#. First, StreamWriter opens the file and writes 'Hello World' with WriteLine. Then it is closed to save the data. Next, StreamReader opens the same file and reads the line back into a variable. Finally, StreamReader is closed. Variables track the open/closed state of streams and the text read. Closing StreamWriter before reading is important to ensure data is saved. This process is a basic way to handle text files in C#.

Practice

(1/5)
1. What is the primary purpose of the StreamReader class in C#?
easy
A. To read text from a file
B. To write text to a file
C. To create a new file
D. To delete a file

Solution

  1. Step 1: Understand StreamReader's role

    StreamReader is designed to read text data from files.
  2. Step 2: Differentiate from StreamWriter

    StreamWriter writes text, not reads it.
  3. Final Answer:

    To read text from a file -> Option A
  4. Quick Check:

    StreamReader reads files = D [OK]
Hint: StreamReader reads, StreamWriter writes [OK]
Common Mistakes:
  • Confusing StreamReader with StreamWriter
  • Thinking StreamReader creates files
  • Assuming StreamReader deletes files
2. Which of the following is the correct syntax to open a file for writing using StreamWriter in C#?
easy
A. StreamWriter writer = StreamWriter("file.txt");
B. using (StreamWriter writer = new StreamWriter("file.txt")) { }
C. using StreamWriter writer = new StreamWriter("file.txt");
D. StreamWriter writer = new StreamWriter.read("file.txt");

Solution

  1. Step 1: Recognize correct StreamWriter instantiation

    The correct way is to use new StreamWriter("file.txt") inside a using block for safe disposal.
  2. Step 2: Check syntax correctness

    using (StreamWriter writer = new StreamWriter("file.txt")) { } uses using with proper syntax and constructor call.
  3. Final Answer:

    using (StreamWriter writer = new StreamWriter("file.txt")) { } -> Option B
  4. Quick Check:

    Correct StreamWriter syntax = B [OK]
Hint: Use 'using' with new StreamWriter(filename) [OK]
Common Mistakes:
  • Missing 'new' keyword
  • Not using 'using' block for disposal
  • Incorrect method calls like .read() on StreamWriter
3. What will be the output of the following C# code snippet?
using (var writer = new StreamWriter("test.txt")) {
    writer.WriteLine("Hello");
    writer.WriteLine("World");
}
using (var reader = new StreamReader("test.txt")) {
    string content = reader.ReadToEnd();
    Console.Write(content);
}
medium
A. HelloWorld
B. Hello\nWorld
C. Hello World
D. Hello World

Solution

  1. Step 1: Understand StreamWriter.WriteLine behavior

    Each WriteLine writes the string plus a newline character at the end.
  2. Step 2: ReadToEnd reads full content including newlines

    The reader reads the entire file content, preserving newlines.
  3. Final Answer:

    Hello\nWorld\n -> Option C
  4. Quick Check:

    WriteLine adds newline, ReadToEnd reads all [OK]
Hint: WriteLine adds newline; ReadToEnd reads full text [OK]
Common Mistakes:
  • Ignoring newline characters added by WriteLine
  • Assuming WriteLine writes without newlines
  • Confusing output formatting in Console.Write
4. Identify the error in the following code snippet:
StreamReader reader = new StreamReader("data.txt");
string line = reader.ReadLine();
Console.WriteLine(line);
reader.Close();
medium
A. Missing 'using' block to ensure file closure
B. ReadLine() should be ReadAll()
C. StreamReader cannot read text files
D. reader.Close() should be called before ReadLine()

Solution

  1. Step 1: Check resource management

    The code opens a StreamReader but does not use a using block, risking resource leaks if exceptions occur.
  2. Step 2: Confirm method correctness

    ReadLine() is correct to read one line; Close() is called but manual closing is less safe than using.
  3. Final Answer:

    Missing 'using' block to ensure file closure -> Option A
  4. Quick Check:

    Use 'using' to auto-close files [OK]
Hint: Always use 'using' to auto-close streams [OK]
Common Mistakes:
  • Not using 'using' block for automatic disposal
  • Confusing ReadLine with ReadAll
  • Calling Close before reading
5. You want to copy the contents of one text file to another using StreamReader and StreamWriter. Which code snippet correctly performs this task?
hard
A. using (var reader = new StreamReader("source.txt")) { string content = reader.ReadToEnd(); var writer = new StreamWriter("dest.txt"); writer.Write(content); }
B. using (var writer = new StreamWriter("dest.txt")) { using (var reader = new StreamReader("source.txt")) { string line; while ((line = reader.ReadLine()) != null) { writer.WriteLine(line); } } }
C. var reader = new StreamReader("source.txt"); var writer = new StreamWriter("dest.txt"); string line = reader.ReadLine(); while (line != null) { writer.WriteLine(line); line = reader.ReadLine(); } reader.Close(); writer.Close();
D. using (var reader = new StreamReader("source.txt")) { using (var writer = new StreamWriter("dest.txt")) { string line; while ((line = reader.ReadLine()) != null) { writer.WriteLine(line); } } }

Solution

  1. Step 1: Check proper resource management

    using (var reader = new StreamReader("source.txt")) { using (var writer = new StreamWriter("dest.txt")) { string line; while ((line = reader.ReadLine()) != null) { writer.WriteLine(line); } } } uses nested using blocks to ensure both reader and writer are properly closed.
  2. Step 2: Verify reading and writing logic

    It reads line by line until null, writing each line to the destination file correctly.
  3. Final Answer:

    Correct nested using blocks with line-by-line copy -> Option D
  4. Quick Check:

    Nested using + line loop = A [OK]
Hint: Use nested 'using' blocks and loop ReadLine [OK]
Common Mistakes:
  • Not disposing writer properly
  • Reversing reader and writer order in using blocks
  • Not looping to read all lines
  • Not disposing writer in option D