Files and Streams
Stream Reader
Read text from a byte stream with a StreamReader.
streams
A `StreamReader` turns bytes from a stream into text lines.
Stream Reader
StreamReaderExample.cs
Replay: real traced execution (multi-file project)
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string label = "note";
string text = label + ":ready";
using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));
using StreamReader reader = new StreamReader(stream);
string line = reader.ReadLine() ?? "";
bool hasColon = line.Contains(":");
Console.WriteLine($"line={line}");
Console.WriteLine($"hasColon={hasColon}");
}
}
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string label = "memo";
string text = label + ":ready";
using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));
using StreamReader reader = new StreamReader(stream);
string line = reader.ReadLine() ?? "";
bool hasColon = line.Contains(":");
Console.WriteLine($"line={line}");
Console.WriteLine($"hasColon={hasColon}");
}
}
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string label = "task";
string text = label + ":ready";
using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));
using StreamReader reader = new StreamReader(stream);
string line = reader.ReadLine() ?? "";
bool hasColon = line.Contains(":");
Console.WriteLine($"line={line}");
Console.WriteLine($"hasColon={hasColon}");
}
}
label ← note, text ← note:ready, line ← note:ready, hasColon ← True
6{7 static void Main()8 {9 string label→ note = "note"; //@label="memo", "task"10 string text→ note:ready = labelnote + ":ready";1112 using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));13 using StreamReader reader = new StreamReader(stream);14 string line→ note:ready = reader.ReadLine() ?? "";15 bool hasColon→ True = linenote:ready.Contains(":");1617 Console.WriteLine($"line={linenote:ready}");18 Console.WriteLine($"hasColon={hasColonTrue}");19 }outputline=note:ready hasColon=True
label ← memo, text ← memo:ready, line ← memo:ready, hasColon ← True
6{7 static void Main()8 {9 string label→ memo = "memo";10 string text→ memo:ready = labelmemo + ":ready";1112 using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));13 using StreamReader reader = new StreamReader(stream);14 string line→ memo:ready = reader.ReadLine() ?? "";15 bool hasColon→ True = linememo:ready.Contains(":");1617 Console.WriteLine($"line={linememo:ready}");18 Console.WriteLine($"hasColon={hasColonTrue}");19 }outputline=memo:ready hasColon=True
label ← task, text ← task:ready, line ← task:ready, hasColon ← True
6{7 static void Main()8 {9 string label→ task = "task";10 string text→ task:ready = labeltask + ":ready";1112 using MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(text));13 using StreamReader reader = new StreamReader(stream);14 string line→ task:ready = reader.ReadLine() ?? "";15 bool hasColon→ True = linetask:ready.Contains(":");1617 Console.WriteLine($"line={linetask:ready}");18 Console.WriteLine($"hasColon={hasColonTrue}");19 }outputline=task:ready hasColon=True