VB.NET Textdatei schreiben – WriteAllText, Encoding (2026)

Mit File.WriteAllText schreibst du in VB.NET eine Textdatei in wenigen Zeilen. In diesem Beitrag siehst du die einfache Variante, das Schreiben mit UTF-8 Encoding, die asynchrone Version ab .NET 5 und ein praktisches Anwendungsbeispiel mit Konfigurationsdateien – mit komplettem Beispielcode.

Willst du stattdessen eine Textdatei einlesen? → VB.NET Textdatei einlesen.

Auftrag?

VB.NET-Entwicklung für dein Projekt?

Ich entwickle täglich mit VB.NET und C#. Ob Dateioperationen oder komplette Anwendungen – schreib mir einfach.

Code – VB.NET Textdatei schreiben

Gestalte Dir für den folgenden Schritt am besten eine ähnliche Oberfläche wie die hier drunter und im Anschluss legen wir mit dem Code los:

VB.NET Textdatei erstellen GUI

Datei schreiben

Erforderliche Klassen und Methoden

Die Möglichkeit zur Erstellung, bzw. Schreiben, Lesen und anderen dateibezogene Operationen finden wir in der File-Klasse. Wenn man in der .NET Framework Dokumentation nach unserem benötigten Begriff „write“ sucht, findet man folgende aktuell wichtige Methoden:

WriteAllText(filepath, contents)

Diese Methode schreibt die übergebenen Zeichen in eine Textdatei in den angegebenen Dateipfad. Wenn die Datei nicht schon existiert, wird sie erstellt und andernfalls überschrieben.

WriteAllText(filepath, contents, encoding)

Hier passiert alles analog zur Methode oben, allerdings wird in diesem Fall das Encoding ausdrücklich angegeben.

WriteAllTextAsync(filepath, contents, cancellationToken)

Diese Methode ist noch relativ neu und steht erst in eurem Projekt ab dem .NET 5 Framework zur Verfügung. Besonders bei großen, bzw. größeren Dateien zeigt diese Methode ihre Vorteile durch den asynchronen Dateizugriff.

Los geht’s

Gehe nun z. B. über den Form-Designer und einem Doppelklick auf den Button in den Ereignishandler für das Button Klick-Ereignis.

Die Datei können wir dann wie folgt in unserem Handler erstellen, bzw. schreiben:

    Private Sub btnWriteFile_Click(sender As Object, e As EventArgs) Handles btnWriteFile.Click
        Dim filepath = tbFilepath.Text.Trim()
        Dim content = tbContent.Text

        WriteFileSync(filepath, content)
        ' WriteFileWithEncodingSync(filepath, content)
        ' WriteFileAsync(filepath, content)
    End Sub

Im ersten Schritt hole ich mir den Dateipfad für die geplante Datei und entferne eventuelle Leerzeichen am Anfang und Ende. Den Inhalt der zu erstellenden Datei legen wir in die Variable „content“, der dem Text der „tbContent“-Textbox entspringt. Im letzten Schritt beginne ich dann mit dem Schreiben der Textdatei, dazu habe ich verschiedene weitere Methoden angelegt.

WriteFileSync(filepath, content)

Hier findet die wohl simpelste Variante statt, Text in eine Textdatei zu schreiben. Wir führen die „WriteAllText„-Methode der File-Klasse mit passenden Parameter wie den Dateipfad und den zu schreibenden Zeichen, sprich dem Inhalt aus. Den Schreibvorgang selbst habe ich mit einem „Try Catch“-Block zum Abfangen globaler Fehler verziert.

WriteFileWithEncodingSync(filepath, content)

Neben unserer Angabe eines expliziten Encodings passiert hier nichts anderes als im Beispiel hier drüber.

WriteFileAsync(filepath, content)

Dies ist die oben bereits angesprochene neue Variante, eine Datei zu schreiben, ansonsten identisch mit der ersten Methode „WriteFileSync“.

Anwendungsbeispiele

Ein praktisches Anwendungsbeispiel: das Speichern und Laden von Konfigurationsdateien im .ini-Format.

Konfigurationsdateien speichern/laden

Textdatei schreiben – Ini-Dateien Konfigurationsdateien
Textdatei schreiben – Ini-Dateien Konfigurationsdateien

Ini-Dateien (.ini) sind ein einfaches Format zum Speichern von Schlüssel-Wert-Paaren und eignen sich gut als leichtgewichtige Konfiguration für Desktop-Anwendungen.

IniFile-Klasse

Im ersten Schritt erstellen wir uns eine sehr einfache und rudimentäre IniFile-Klasse. Diese dient der Veranschaulichung, wie man im Ini-Format eine Textdatei schreibt und wieder ausliest. Neben dem Dateinamen, dem Verzeichnis und dem daraus resultierenden Dateipfad besitzt das Ini-File auch einen Namen.

Für Verbesserungen würde mir unter anderem die Verwendung verschiedener Encodings und Serializer einfallen.

Imports System.IO

Public Class IniFile

    ''' <summary>
    ''' Gets or Sets the path to the directory, containing the file
    ''' </summary>
    Public Property Directory As String

    ''' <summary>
    ''' Gets or Sets the filename of the file
    ''' </summary>
    Public Property FileName As String

    ''' <summary>
    ''' Returns the complete path to the ini file
    ''' </summary>
    Public ReadOnly Property FilePath As String
        Get
            Return Path.Combine(Directory, FileName)
        End Get
    End Property

    Public Property Sections As List(Of IniFileSection)

    Sub New()
        Sections = New List(Of IniFileSection)
    End Sub

    Public Async Function Save() As Task
        Dim contents = ToIniFileString()
        Await File.WriteAllTextAsync(FilePath, contents)
    End Function

    Public Shared Async Function Load(filePath As String) As Task(Of IniFile)
        Dim fileParts = filePath.Split("\")
        Dim iniFile = New IniFile()
        iniFile.Directory = String.Join("\", fileParts.Take(fileParts.Length - 1))
        iniFile.FileName = fileParts.Last()
        Dim contents = Await File.ReadAllTextAsync(filePath)
        Dim nonEmptyLines = contents.Split(Environment.NewLine).Where(Function(x) Not String.IsNullOrWhiteSpace(x))

        ' = nothing is a worarkound for "could be nothing" warning - #irony
        Dim currentSection As IniFileSection = Nothing
        For Each line In nonEmptyLines
            Dim isNewSection = line.StartsWith("[") AndAlso line.EndsWith("]")
            If isNewSection Then
                Dim sectionName = line.Replace("[", "]").Replace("]", "")
                currentSection = New IniFileSection(sectionName)
                iniFile.Sections.Add(currentSection)
                Continue For
            End If

            Dim isNewEntry = line.Contains("=")
            If isNewEntry Then
                Dim entryParts = line.Split("=")
                Dim key = entryParts(0)
                Dim value = entryParts(1)
                Dim entry = New IniFileSectionEntry(key, value)
                currentSection.Entries.Add(entry)
                Continue For
            End If
        Next
        Return iniFile
    End Function

    Public Function ToIniFileString() As String
        Dim sectionStrings = New List(Of String)
        For Each section In Sections
            sectionStrings.Add(section.ToIniFileString())
        Next
        Return String.Join(Environment.NewLine, sectionStrings)
    End Function

    Public Overrides Function ToString() As String
        Return $"IniFile: {FilePath}"
    End Function

End Class

IniFileSection-Klasse

Als nächstes kommt die IniFileSection-Klasse, die neben dem Namen der Sektion auch dessen Einträge beinhaltet.

Die gesamten Daten können wir dann mit Hilfe der kleinen Helper-Methode namens „ToIniFileString“ bekommen.

Public Class IniFileSection

    Public Property Name As String

    Public Property Entries As List(Of IniFileSectionEntry)

    Sub New(name As String)
        Me.Name = name
        Entries = New List(Of IniFileSectionEntry)
    End Sub

    Public Function ToIniFileString() As String
        Dim str = $"[{Name}]"
        For Each entry In Entries
            str &= $"{Environment.NewLine}{entry.ToIniFileString()}"
        Next
        Return str
    End Function

    Public Overrides Function ToString() As String
        Return $"IniFileSection: {Name}"
    End Function

End Class

IniFileSectionEntry-Klasse

Zum Schluss kommt die IniFileSectionEntry-Klasse, die den Schlüssel und den dahinter stehenden Wert beinhaltet. Sie hat die gleichnamige Helper-Funktion, um den Eintrag ini-konform umzuwandeln.

Public Class IniFileSectionEntry

    Public Property Key As String

    Public Property Value As String

    Sub New()
        Key = ""
        Value = ""
    End Sub

    Sub New(key As String, value As String)
        Me.Key = key
        Me.Value = value
    End Sub

    Public Function ToIniFileString() As String
        Return $"{Key}={Value}"
    End Function

    Public Overrides Function ToString() As String
        Return $"IniFileSectionEntry: {Key}={Value}"
    End Function

End Class

Verwendungsbeispiel in einer Konsolenanwendung

Zu guter Letzt kommt das Modul für die Konsole, worin wir 1-2 Beispiel-Aufrufe durchführen. Lade Dir bei Bedarf eines des Beispielprojekte herunter, dann kannst Du Dir das Ganze im Detail ansehen.

Module Program

    Sub Main(args As String())
        Console.Title = "TextFileCreateIniFile"
        DoExampleReadWrite()
    End Sub

    Public Async Sub DoExampleReadWrite()
        ' A
        ' put the config file into the same directory as the exe file
        ' or change the path
        Dim ini = Await IniFile.Load(".\example-config.ini")
        Console.WriteLine("Press Enter to overwrite the first sections, first entries value with TEST")
        Console.ReadLine()
        ini.Sections(0).Entries(0).Value = "TEST"
        Console.WriteLine("Press Enter to save the changes to file")
        Console.ReadLine()
        Await ini.Save()
        Console.WriteLine("File saved, press enter to leave")
        Console.ReadLine()
    End Sub

End Module
Interessiert?

VB.NET-Entwicklung für dein Projekt?

Ich entwickle täglich mit VB.NET und C#. Ob Dateioperationen oder komplette Anwendungen – schreib mir einfach.

Wie schreibe ich eine Textdatei in VB.NET?

Verwende File.WriteAllText(filepath, content) aus dem Namespace System.IO. Die Methode erstellt die Datei, wenn sie nicht existiert, und überschreibt sie andernfalls.

Wie schreibe ich eine Textdatei mit UTF-8 Encoding in VB.NET?

Übergib das Encoding als dritten Parameter: File.WriteAllText(filepath, content, System.Text.Encoding.UTF8). Das stellt sicher, dass Sonderzeichen wie Umlaute korrekt gespeichert werden.

Gibt es eine asynchrone Methode zum Schreiben in VB.NET?

Ja. Ab .NET 5 steht Await File.WriteAllTextAsync(filepath, content) zur Verfügung. Sie ist besonders bei größeren Dateien sinnvoll, um den UI-Thread nicht zu blockieren.

Wird eine bestehende Datei überschrieben oder angehängt?

WriteAllText überschreibt eine bestehende Datei vollständig. Willst du Inhalt anhängen statt überschreiben, verwende stattdessen File.AppendAllText(filepath, content).

Kompletter Code – VB.NET Textdatei schreiben

Imports System.IO

Public Class Form1

    Private Sub btnWriteFile_Click(sender As Object, e As EventArgs) Handles btnWriteFile.Click
        Dim filepath = tbFilepath.Text.Trim()
        Dim content = tbContent.Text

        WriteFileSync(filepath, content)
        ' WriteFileWithEncodingSync(filepath, content)
        ' WriteFileAsync(filepath, content)
    End Sub

    Private Sub WriteFileSync(filepath As String, content As String)
        Try
            File.WriteAllText(filepath, content)
        Catch ex As Exception
            MessageBox.Show("Couldn't write file sync: " & ex.Message)
        End Try
    End Sub

    Private Sub WriteFileWithEncodingSync(filepath As String, content As String)
        Dim encoding = System.Text.Encoding.UTF8
        Try
            File.WriteAllText(filepath, content, encoding)
        Catch ex As Exception
            MessageBox.Show("Couldn't write file sync with encoding: " & ex.Message)
        End Try
    End Sub

    ' only available with .NET 5
    ' not in .NET Framework Apps
    'Private Sub WriteFileAsync(filepath As String, content As String)
    '    Try
    '        File.WriteAllTextAsync(filepath, content)
    '    Catch ex As Exception
    '        MessageBox.Show("Couldn't write file async: " & ex.Message)
    '    End Try
    'End Sub

End Class

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Robert Skibbe
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.