.ini Datein Speichern und Auslesen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    .ini Datein Speichern und Auslesen

    Hallo,

    Ich befasse mich schon seit ein paar Wochen mit VB und finde es macht auch riesigen Spaß, zurzeit arbeite ich an einem "Tool" das mir meine Verwaltung meiner Passwörter etc vereinfacht.
    Was soll mein Tool machen und wofür brauchst du das?
    Mein Programm soll eine .ini Datei erstellen, wo ich meine Daten per Textbox reinschreibe.
    Zum größten Teil arbeite ich daran, als Übung,weil ich ziemlich neu bin, außerdem ist meine Passwort Verwaltung etc. übersichtlicher werden.


    So sollte das Programm eigentlich funktionieren:

    1. Ich Starte die .exe
    2. Es sind 3(oder mehr) Textboxen abgebildet und 2 Buttons.
    3. Die 3 Textboxen sind für jeweils andere Sachen zuständig, 1 Username, 2 Passwort, 3 Email (z.B. für ein Online Spiel)
    4. Auf dem Button1 ist "Speichern" abgebildet, auf dem Button2 ist "laden" abgebildet.
    5. Wenn ich in die Textboxen was eingebe und auf dem Button1 drücke soll ein Fenster aufkommen, wo der Speicher Ort und Name abgefragt wird.
    6. Wenn ich auf dem Button2 drücke soll sich das "Öffnen Fenster" Öffnen und ich kann meine davor erstellte .ini öffnen und in denn Textboxen werden die Daten wieder gegeben, die ich eingegeben hatte.

    So in etwa soll das funktionieren, ich habe mir auch schon die Funktionen angeguckt mit:

    SaveFileDialog
    OpenFileDialog

    Und ich habe auch eine "API" gefunden, die .ini datein ausliest, leider komme ich nicht damit klar, wie ich den Code zusammen setzen muss...

    Hier ein Teil meines Codes:

    VB.NET-Quellcode

    1. INI_WriteValueToFile("Private Daten", "User", TextBox1.Text, ".\Test.ini")
    2. INI_WriteValueToFile("Private Daten", "Passwort", TextBox2.Text, ".\Test.ini")
    3. INI_WriteValueToFile("Private Daten", "Email", TextBox3.Text, ".\Test.ini"
    4. TextBox1.Text = INI_ReadValueFromFile("Private Daten", "User", "", ".\Test.ini")
    5. TextBox2.Text = INI_ReadValueFromFile("Private Daten", "Passwort", "", ".\Test.ini")
    6. TextBox3.Text = INI_ReadValueFromFile("Private Daten", "Email", "", ".\Test.ini")


    Und ja, ich weiß das,dass \Test.ini für denn Namen zuständig ist, aber ich möchte das ich selber einen Namen eingeben kann und es auch Speichern wo ich möchte, genau das gleich will ich mit Laden. :saint:

    Gibt es einfachere Methoden?

    PS: Ich möchte das nicht in eine List oder Rich Box Auslesen.
    Also,

    so werden meine Textboxen gefüllt:

    (Settings.ini wird dabei geladen)


    Quellcode

    1. Dim sAppPath As String
    2. sAppPath = Application.StartupPath
    3. Dim sb As StringBuilder
    4. sb = New StringBuilder(1024)
    5. INI.Lesen("Ueberschrift", "Path", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    6. Einstellungen.Textbox1.Text = sb.ToString
    7. INI.Lesen("Ueberschrift", "Path", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    8. Einstellungen.Textbox2.Text = sb.ToString
    9. INI.Lesen("Ueberschrift", "Path", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    10. Einstellungen.Textbox3.Text = sb.ToString
    11. INI.Lesen("Ueberschrift", "Path", "", sb, sb.Capacity, sAppPath & "\Settings.ini")
    12. Einstellungen.Textbox4.Text = sb.ToString
    13. Einstellungen.Show()

    Die .ini sieht dann so aus:

    Quellcode

    1. [Ueberschrift]
    2. Path=C:\
    3. [Ueberschrit]
    4. Path=C:\
    5. [Ueberschrift]
    6. Path=
    7. [Ueberschrift]
    8. Path=




    Die Textboxen werden bei mir aber allerdings schon beim Aufrufen der "Einstellungen" über den Button "Einstellungen" gefüllt.
    Also wenn Du in dem Moment auf den Button drückst, löst er die Funktion aus, liest die .ini Datei und füllt damit die Textboxen.

    Ich hoffe das hilft dir irgendwie weiter.
    Generell ist das keine gute Idee, überhaupt noch mit Ini-Dateien zu arbeiten.
    Wenn man Einstellungen (englisch "Settings") speichern will, dann soll man vorrangig die Settings nehmen, die im Anwendungsframework bereitgestellt werden: Settings richtig verwenden + an Settings binden
    Aber auch, wenn man die nicht mag, nimmt man keine Inis, sondern setzt hauptsächlich auf ein Xml-Dateiformat - in der einen oder anderen Weise: Wie am besten die Einstellungen speichern?

    Dionys schrieb:

    Die .ini sieht dann so aus:
    Diese INI ist keine Windows-INI, da die Formatierung nicht konform ist. Dies wäre richtiger:

    Quellcode

    1. [Ueberschrift_1]
    2. Path=C:\
    3. [Ueberschrift_2]
    4. Path=C:\
    Allerdings lässt sich Dein Inhalt ganz easy auf eine XML-Datei abbilden, folge den Links vom @ErfinderDesRades.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ich verweise einfach mal auf die wunderbare IniLib von @~blaze~, die nicht nur einfach zu bedienen ist, sodern auch ziemlich gut dokumentiert ist: IniLib - 08.11.2011

    Grüße
    Väinämö

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vainamo V“ ()

    *Vollzitat entfernt*
    Danke dir, ist eine gute Funktion und ist ziemlich simple, damit werde ich mich später befassen ^^.

    So zu meinem Problem.

    VB.NET-Quellcode

    1. ​INI_WriteValueToFile("Private Daten", "User", TextBox1.Text, ".\Test.ini")
    2. INI_WriteValueToFile("Private Daten", "Passwort", TextBox2.Text, ".\Test.ini")
    3. INI_WriteValueToFile("Private Daten", "Email", TextBox3.Text, ".\Test.ini"
    4. TextBox1.Text = INI_ReadValueFromFile("Private Daten", "User", "", ".\Test.ini")
    5. TextBox2.Text = INI_ReadValueFromFile("Private Daten", "Passwort", "", ".\Test.ini")
    6. TextBox3.Text = INI_ReadValueFromFile("Private Daten", "Email", "", ".\Test.ini")


    Die Funktion, wie sie ist finde ich eigentlich ganz gut, der einzige "Harken" an der Sache ist, das ich einen Selbständigen Speicher Pfard angeben möchte(Speichern als...) und genau so soll es mit Laden sein... Leider bin ich ein Blutiger Anfänger was das betrifft. Und muss noch viel lernen.

    Edit by ~blaze~:
    *Vollzitat entfernt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Hej @Hoxfox!

    Speicher dir den Pfad doch in einer Variable.

    VB.NET-Quellcode

    1. Dim IniPath As String


    Dann kannst du mit einem SaveFileDialog zum Speichern bzw. einem OpenFileDialog zum Öffnen, den Pfad zuweisen und in deinen Funktionen verwenden.

    VB.NET-Quellcode

    1. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then 'bzw. SaveFileDialog
    2. IniPath = OpenFileDialog1.FileName 'bzw. SaveFileDialog
    3. End If


    Grüße
    Väinämö

    Hoxfox schrieb:

    einen Selbständigen Speicher Pfard angeben
    Meinst Du:
    Auswahl eines Speicherpfades (im Sinne von SaveFileDialog, wie es @Vainamo V geschrieben hat)
    oder
    Meinst Du die Bestückung mehrerer INI-Dateien mit denselben Einträgen aber unterschiedlichen Werten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Vainamo V Danke erstmal, bin leider momentan nicht zuhause und genau das meine ich ^^, mit SaveFileDialog etc.

    @RodFromGermany Ich meine einfach ein Simples "SaveFileDialog" und "OpenFileDialog" :).


    Hier ein beispiel für ein bisschen mehr Überblick über mein Problem.

    VB.NET-Quellcode

    1. INI_WriteValueToFile("Private Daten", "User", TextBox1.Text, ".\Test.ini")


    Das am ende, dass ".\Test.ini" soll sozusagen nicht da sein, es soll durch ein "SaveFileDialog" ersetzt werden(Mit vielen Textboxen in 1ne .ini datei)

    Genau das gleiche wie beim Auslesen.

    VB.NET-Quellcode

    1. TextBox1.Text = INI_ReadValueFromFile("Private Daten", "User", "", ".\Test.ini")


    Dieses .\Test.ini soll durch ein OpenFileDialog ersetzt werden.
    Sprich. ich speicher eine .ini auf dem Desktop als blabla.ini und meine .exe liegt in einem Ordner, ich möchte auf laden drücken und einfach die blabla.ini laden(In die Textboxen).
    Und das mit vielen Datein, sie sollen sich nicht unbedingt im gleichen Ordner befinden, wie meine .exe (Möchte auch nicht mit C:\Admin\Desktop etc. arbeiten.)


    So sollte der Code NICHT aussehen.

    VB.NET-Quellcode

    1. TextBox1.Text = INI_ReadValueFromFile("Private Daten", "User", "", "C:\Users\Admin\Desktop\blabla.ini")


    Hoffe konnte nochmal einen Einblick geben.^^
    @Hoxfox Ich empfehle Dir, ein wenig OOP zu denken.
    Mach Dir eine INI-Datenklasse, die als Member (Properties) alle Texte hat und die den Pfad zu Deiner INI-Datei übergeben bekommt.
    Dann gibst Du ihr die Methoden Read() und Write(), wo die INI-Datei ausgelesen bzw. geschrieben wird.
    Nach dem Lesen kannst Du Deine TextBoxen befüllen, und nach dem Editieren schiebst Du die neuen Daten in die Klasse und speicherst.
    Feddich. :D
    -----
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class IniDaten
    2. Public Property Path As String
    3. Public Property Date1 As String
    4. Public Property Date2 As String
    5. Public Property Date3 As String
    6. Public Sub Read()
    7. If String.IsNullOrEmpty(Me.Path) Then
    8. Throw New ArgumentNullException
    9. End If
    10. Me.Date1 = INI_ReadValueFromFile("Private Daten 1", "User", "", Path)
    11. Me.Date2 = INI_ReadValueFromFile("Private Daten 2", "User", "", Path)
    12. Me.Date3 = INI_ReadValueFromFile("Private Daten 3", "User", "", Path)
    13. End Sub
    14. End Class

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Vollzitat entfernt. ~Trade
    Erstmal Danke, leider wird mir nicht ganz schlüssig was du damit meinst :( ?( (Bin echt Blutiger anfänger) könntest du es evtl. bisschen leichter erklären?...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Hoxfox schrieb:

    bisschen leichter erklären
    Kapsele Deine Funktionalität.
    Weg vom Spagetti-Code.
    Dekne objektorientiert (um das zu lernen, braucht man ca. 1 Jahr).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    OOP bedeutet Objekt orientierte Programmierung. Das ist ein Grundkonzept.
    VB.Net (was du ja hier programmierst) ist eine objektorientierte Programmiersprache.

    Ein Objekt hat bestimmte Eigenschaften und kann bestimmte Dinge tun.. Auch kann es Dinge von anderen Objekten erben.

    Beispiel aus der realen Welt um es zu veranschaulichen...
    Ein Auto ist ein Objekt.
    Ein Auto hat gewisste Eigenschaften (Gewicht, Größe, Farbe, Maximalgeschwindigkeit, schießmichtot).
    Ein Auto kann bestimmte Dinge (zB. Fahren).

    Ein Mercedes ist auch ein Objekt...
    Er hat alle Eigenschaften die ein Auto hat (erbt diese also) aber auch noch zusätzliche...

    In deinem Fall ist das Objekt die "IniDatei"
    Diese hat bestimmte Eigenschaften

    VB.NET-Quellcode

    1. ​Public Property Path As String
    2. Public Property Date1 As String
    3. Public Property Date2 As String
    4. Public Property Date3 As String


    Sie kann auch bestimmte Dinge tun... zB. Daten aus ner Datei lesen.

    VB.NET-Quellcode

    1. ​Public Sub Read()
    2. If String.IsNullOrEmpty(Me.Path) Then
    3. Throw New ArgumentNullException
    4. End If
    5. Me.Date1 = INI_ReadValueFromFile("Private Daten 1", "User", "", Path)
    6. Me.Date2 = INI_ReadValueFromFile("Private Daten 2", "User", "", Path)
    7. Me.Date3 = INI_ReadValueFromFile("Private Daten 3", "User", "", Path)
    8. End Sub
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Hoxfox schrieb:

    Erledigt
    musst Du selbst machen.
    Doppelklicke auf das kleine rote Quadrat neben dem Thread-Titel.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!