Reading Files in Visual Basic .NET

Here’s the translation of the Go code to Visual Basic .NET, along with explanations in Markdown format suitable for Hugo:

Reading and writing files are basic tasks needed for many Visual Basic .NET programs. First we’ll look at some examples of reading files.

Imports System
Imports System.IO

Module FileReading

    ' Reading files requires checking most calls for errors.
    ' This helper will streamline our error checks below.
    Sub Check(ByVal condition As Boolean, ByVal message As String)
        If Not condition Then
            Throw New Exception(message)
        End If
    End Sub

    Sub Main()
        ' Perhaps the most basic file reading task is
        ' slurping a file's entire contents into memory.
        Dim dat As String = File.ReadAllText("/tmp/dat")
        Console.Write(dat)

        ' You'll often want more control over how and what
        ' parts of a file are read. For these tasks, start
        ' by opening a file to obtain a FileStream object.
        Using f As FileStream = File.OpenRead("/tmp/dat")
            ' Read some bytes from the beginning of the file.
            ' Allow up to 5 to be read but also note how many
            ' actually were read.
            Dim b1(4) As Byte
            Dim n1 As Integer = f.Read(b1, 0, 5)
            Console.WriteLine($"{n1} bytes: {System.Text.Encoding.UTF8.GetString(b1, 0, n1)}")

            ' You can also Seek to a known location in the file
            ' and Read from there.
            f.Seek(6, SeekOrigin.Begin)
            Dim b2(1) As Byte
            Dim n2 As Integer = f.Read(b2, 0, 2)
            Console.WriteLine($"{n2} bytes @ {f.Position - n2}: {System.Text.Encoding.UTF8.GetString(b2, 0, n2)}")

            ' Other methods of seeking are relative to the
            ' current position,
            f.Seek(4, SeekOrigin.Current)

            ' and relative to the end of the file.
            f.Seek(-10, SeekOrigin.End)

            ' There is no built-in rewind, but
            ' Seek(0, SeekOrigin.Begin) accomplishes this.
            f.Seek(0, SeekOrigin.Begin)

            ' The StreamReader class implements a buffered
            ' reader that may be useful both for its efficiency
            ' with many small reads and because of the additional
            ' reading methods it provides.
            Using r4 As New StreamReader(f)
                Dim b4 As Char() = New Char(4) {}
                r4.Read(b4, 0, 5)
                Console.WriteLine($"5 bytes: {New String(b4)}")
            End Using
        End Using
    End Sub

End Module

To run the program:

$ echo "hello" > /tmp/dat
$ echo "vb" >>   /tmp/dat
$ dotnet run
hello
vb
5 bytes: hello
2 bytes @ 6: vb
5 bytes: hello

This example demonstrates various methods of reading files in Visual Basic .NET:

  1. We start by reading the entire file content using File.ReadAllText.
  2. Then we open the file using File.OpenRead to get more control over reading.
  3. We demonstrate reading a specific number of bytes from the file.
  4. We show how to use Seek to move to different positions in the file.
  5. Finally, we use a StreamReader for buffered reading.

Note that Visual Basic .NET uses Using statements to ensure that resources like file handles are properly closed when we’re done with them. This is similar to the defer concept in other languages.

The Check function is implemented as a simple error-throwing mechanism, which is a common pattern in Visual Basic .NET for handling errors.

Next, we’ll look at writing files.