File System, Streams and Serialization
31.1 Files and Directories
Imports System.IO
Dim root = Path.Combine(AppContext.BaseDirectory, "data")
Directory.CreateDirectory(root)
Dim file1 = Path.Combine(root, "notes.txt")
Await File.WriteAllTextAsync(file1, "Hello")
Await File.AppendAllLinesAsync(file1, {"line 2", "line 3"})
For Each line In File.ReadLines(file1) : Console.WriteLine(line) : Next
For Each f In Directory.EnumerateFiles(root, "*.txt", New EnumerationOptions With {.RecurseSubdirectories = True})
Dim info As New FileInfo(f)
Console.WriteLine($"{info.Name} {info.Length:N0} bytes")
Next31.2 Streams
Files (FileOptions.Asynchronous, buffer size) GZipStream, BrotliStream, ZLibStream NetworkStream, SslStream Named/anonymous pipes (IPC)
StreamReader/StreamWriter, BinaryReader/BinaryWriter Text/binary adapters
Memory-mapped files (MemoryMappedFile) for huge files and IPC. FileSystemWatcher for change notifications.
Using input = File.OpenRead("log.txt"),
output = File.Create("log.txt.gz"),
gzip As New Compression.GZipStream(output, Compression.CompressionLevel.Optimal)
Await input.CopyToAsync(gzip)
End Using31.3 Serialization
System.Text.Json (fast, built-in), Newtonsoft.Json (feature-rich, legacy)
XmlSerializer, DataContractSerializer, XML literals TextFieldParser, CsvHelper
MessagePack-CSharp, protobuf-net (works from VB), BinaryWriter ClosedXML, EPPlus, NPOI
⚠️ BinaryFormatter is removed/disabled in modern .NET (security risk). Never deserialize untrusted data with type-name-handling features (Newtonsoft TypeNameHandling.All).
Imports System.Text.Json
Dim opts As New JsonSerializerOptions(JsonSerializerDefaults.Web) With {.WriteIndented = True}
Dim json = JsonSerializer.Serialize(order, opts)
Using fs = File.Create("order.json")
Await JsonSerializer.SerializeAsync(fs, order, opts)
End Using
Using fs = File.OpenRead("order.json")
Dim loaded = Await JsonSerializer.DeserializeAsync(Of Order)(fs, opts)
End Using