Visual C#: Arbeiten mit INI-Dateien

Auch wenn INI-Dateien etwas aus der Mode gekommen sind, ist es durchaus legitim mit Ihnen zu arbeiten und Informationen darin zu speichern. Um dies ohne größere Probleme zu tun, habe ich eine Klasse in C# geschrieben, deren Anwendung ich in diesem Artikel erklären möchte.

Hinweis:
Dieser Artikel basiert auf Version 1.0.3 vom 09.09.2017 der Klasse 'INIFile'.

Klasse herunterladen und einbinden

Als erstes ist es notwendig die Klasse herunterzuladen. Bitte beachtet, dass die Klasse unter folgender Lizenz von mir veröffentlicht wurde.

Nachdem das heruntergeladene ZIP-Paket entpackt ist, kann die Klasse in einem Visual Studio Projekt eingebunden werden.

visual-c-sharp-arbeiten-mit-ini-dateien-01

Anschließend wird die Klasse 'INIFile' im Projektmappen-Explorer angezeigt:

visual-c-sharp-arbeiten-mit-ini-dateien-02

Namespace einbinden

Um mit der Klasse arbeiten zu können, muss in der Klasse, in der wir mit 'INIFile' arbeiten möchten, der Namespace 'Nocksoft.IO.ConfigFiles' eingebunden werden. Dafür ist folgender Code bei den using-Direktiven hinzuzufügen:

Objekt der Klasse 'INIFile' erzeugen

Jetzt kann eine neue Instanz der Klasse 'INIFile' erzeugt werden. Ich nenne das Objekt 'iniFile'. Als Parameter erwartet der Konstruktor der Klasse 'INIFile' die Pfadangabe der INI-Datei, in der wir lesen oder schreiben wollen. Dafür eignet sich an gewünschter Stelle folgender Code:

Jetzt stehen mehrere Methoden zur Verfügung. Die wichtigsten Methoden sind 'GetValue()' und 'SetValue()'. Denn mit diesen können Werte aus der INI-Datei gelesen bzw. in diese hineingeschrieben werden.

Methode 'GetValue()'

Mit 'GetValue()' lässt sich ein Wert auslesen. Dazu muss angegeben werden, in welcher Sektion und zu welchem Schlüssel der Wert gehört. Ein Aufruf sieht dann beispielsweise so aus:

Als optionalen Parameter kann der Methode noch ein Wahrheitswert übergeben werden. Wird 'true' übergeben, wird der Rückgabewert in Kleinbuchstaben konvertiert. Dadurch ist das Programm unempfindlich gegen Groß- und Kleinschreibung. Der Defaultwert ist an dieser Stelle 'false'.

Methode 'SetValue()'

Um einen Wert in die INI-Datei zu schreiben oder zu ändern, eignet sich die Methode 'SetValue()'. Auch dieser Methode sind die Parameter ’section' und 'key' zu übergeben. Als dritten Parameter erwartet die Methode noch einen String, der in die INI-Datei geschrieben werden soll. Wenn die Sektion oder der Schlüssel nicht vorhanden sind, werden diese in der INI-Datei angelegt. Genau wie bei 'GetValue()' kann hier wieder optional ein Wahrheitswert übergeben werden. Wird 'true' übergeben, wird der Wert in Kleinbuchstaben abgespeichert. Der Defaultwert ist an dieser Stelle ebenfalls 'false'. Hier ein Beispiel des Aufrufs:

Methode 'GetSection()'

Die Methode 'GetSection()' gibt den gesamten Inhalt einer Section aus der INI-Datei als Liste zurück. Optional auch mit Kommentaren. Ein Aufruf sieht dann etwa so aus:

Sollen auch Kommentare aus der INI-Datei mit zurückgegeben werden, ist als zweiter Parameter der Wahrheitswert 'true' zu übergeben.

Fehlerbehandlung

Es kann sein, dass die INI-Datei, die übergeben wird, nicht vorhanden ist. Daher ist es ratsam diesen Fehler mit einer Überprüfung oder einem Try-Catch-Block abzufangen. Dies könnte dann beispielsweise so aussehen:

Kleines Beispielprogramm

Im folgenden Beispiel wird als erstes ein Objekt vom Typ 'INIFile' erzeugt. Mit diesem greife ich auf die Methode 'SetValue()' zu. Es wird in der Sektion 'anwender' für den Schlüssel ’name' der Wert geschrieben, den der Anwender in die TextBox eingegeben hat. Im nächsten Schritt wird dieser Wert wieder aus der INI-Datei gelesen, um ihn in einer MessageBox auszugeben. Der Try-Catch-Block fängt den Fehler ab, dass die INI-Datei nicht vorhanden ist.

 

Ich hoffe, die Klasse stößt auf Gefallen und nimmt euch etwas Arbeit ab.

Beitrag kommentieren

Bitte verfasse einen Kommentar.

Dein Kommentar wird vor der Freischaltung von einem Admin moderiert.




  • Thy Nel

    05.01.2017, 20:17 Uhr

    Danke.
    Genau wonach ich gesucht habe.

    Und noch mit einen anfänger freundlichen tutorial.
    Perfekt für mich.

    Mit .ini dateien komm ich besser klar als mit .xml dateien

  • Dominik Kr

    21.04.2017, 7:07 Uhr

    Hallo,

    zuerst einmal vielen Dank für diese hilfreiche Klasse.
    Was mir allerdings noch fehlt ist eine Funktion um Einträge auch wieder zu löschen.

    Wie kann ich den Pfad zur Datei im Programm ändern ohne jedes Mal eine neue Klasse anzulegen?

    Danke & Viele Grüße
    Dominik

    • Rafael Nockmann

      22.04.2017, 13:05 Uhr

      Leider gibt es derzeit keine Möglichkeit bestehende Einträge zu entfernen. Aber das ist für die Zukunft geplant.
      Nachträglich ist es auch nicht möglich den Pfad zur INI-Datei zu bearbeiten. Es wäre aber möglich, dass ich auch diese Funktion implementieren werde.

      • Dominik Kr

        28.04.2017, 8:05 Uhr

        Das wäre natürlich super.

        Dann wäre diese Klasse auch universal verwendbar.

        Grüße
        Dominik

  • Dominik Kr

    28.04.2017, 8:19 Uhr

    ///
    /// Die Methode ändert den Pfad zur Datei.
    ///
    /// Pfad zur Datei.
    public void SelectFile(string file)
    {
    _File = file;
    }

    Hat bei mir funktioniert und reicht denke ich völlig aus.
    Vielleicht kannst du das ganze hier auch gebrauchen.

    Grüße
    Dominik

  • Tony

    22.08.2017, 10:52 Uhr

    Hey und vielen Dank!
    Funktioniert super, aber wie kann ich z.b: alle sections aus der *.ini auslesen und in der combobox anzeigen?
    beste Grüße

    • Rafael Nockmann

      23.08.2017, 17:10 Uhr

      Hallo Tony,

      diese Funktionalität bringt meine INI-Klasse leider noch nicht mit. Aber das wäre sicher eine sinnvolle Idee für die Zukunft.

      Viele Grüße
      Rafael

  • Maurice

    29.08.2017, 10:58 Uhr

    Moin,

    super Classe, hat mir vieles einfach gemacht!

    Frage, ich würde gerne GetSection verwenden, aber irgendwie stehe ich gerade auf dem Schlauch.

    LG

    Maurice

    • Rafael Nockmann

      02.09.2017, 21:08 Uhr

      Hallo Maurice,

      vielen Dank für das Feedback.
      Die Methode GetSection() gibt eine Liste "List<string>" zurück, wobei jeder Index eine Zeile aus der Section der INI-Datei darstellt.
      Hier ein Beispielaufruf:
      var section = iniFile.GetSection("section");
      foreach (var item in section)
      {
      Console.WriteLine(item);
      }

      Ich arbeite aber gerade auch an einer neuen Version der Klasse INIFile. Wenn diese fertig ist, werde ich die Anleitung hier auch mal etwas aktualisieren.

      Liebe Grüße
      Rafael

      • Maurice

        04.09.2017, 13:11 Uhr

        Hey,

        großartig, vielen Dank.

        LG

        Maurice

  • Roland Martin

    07.11.2017, 10:24 Uhr

    Super Sache! Einfach und Gut! Danke hat mir sehr geholfen.