Imports System.IO
File.WriteAllText("hello.txt", "Hello, file!")
File.AppendAllText("hello.txt", Environment.NewLine & "Another line")
Dim content = File.ReadAllText("hello.txt")
Dim lines = File.ReadAllLines("hello.txt")
File.WriteAllLines("list.txt", {"one", "two", "three"})
For Each line In File.ReadLines("big.log") ' lazy: good for large files
If line.Contains("ERROR") Then Console.WriteLine(line)
Next
Dim bytes = File.ReadAllBytes("image.png")
File.WriteAllBytes("copy.png", bytes)
If File.Exists("hello.txt") Then
File.Copy("hello.txt", "backup.txt", overwrite:=True)
File.Move("backup.txt", "archive\backup.txt")
File.Delete("hello.txt")
End If
Dim info As New FileInfo("data.csv")
Console.WriteLine($"{info.Name} {info.Length} bytes, modified {info.LastWriteTime}")
' Async versions: File.ReadAllTextAsync, WriteAllTextAsync, ...
34.2 Directories and Paths
Directory.CreateDirectory("output\reports")
For Each f In Directory.GetFiles("C:\Data", "*.txt", SearchOption.AllDirectories)
Console.WriteLine(Path.GetFileName(f))
Next
For Each d In Directory.EnumerateDirectories(".")
Console.WriteLine(d)
Next
Directory.Delete("temp", recursive:=True)
Dim full = Path.Combine("C:\Data", "Reports", "q3.xlsx")
Console.WriteLine(Path.GetExtension(full) & " " & Path.GetFileNameWithoutExtension(full) & " " & Path.GetDirectoryName(full))
Console.WriteLine(Path.GetTempPath() & " " & Path.GetTempFileName() & " " & Path.GetRandomFileName())
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
Console.WriteLine(AppContext.BaseDirectory)
34.3 Streams, Readers and Writers
Using writer As New StreamWriter("log.txt", append:=True, encoding:=Text.Encoding.UTF8)
writer.WriteLine($"{Date.Now:s} Application started")
End Using
Using reader As New StreamReader("log.txt")
While Not reader.EndOfStream
Console.WriteLine(reader.ReadLine())
End While
End Using
Using fs As New FileStream("data.bin", FileMode.Create), bw As New BinaryWriter(fs)
bw.Write(42) : bw.Write(3.14) : bw.Write("text")
End Using
Using fs As New FileStream("data.bin", FileMode.Open), br As New BinaryReader(fs)
Console.WriteLine($"{br.ReadInt32()} {br.ReadDouble()} {br.ReadString()}")
End Using
Using ms As New MemoryStream()
ms.Write(bytes, 0, bytes.Length)
End Using
34.4 Compression and Watching Files
Imports System.IO.Compression
ZipFile.CreateFromDirectory("reports", "reports.zip")
ZipFile.ExtractToDirectory("reports.zip", "extracted")
Dim watcher As New FileSystemWatcher("C:\Inbox", "*.csv") With {.EnableRaisingEvents = True}
AddHandler watcher.Created, Sub(s, e) Console.WriteLine($"New file: {e.FullPath}")