Problemchen mit Textdatei beim Hinzufügen in die Registry

  • VB.NET
  • .NET 4.5

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy2002.

    Problemchen mit Textdatei beim Hinzufügen in die Registry

    Hallo,

    ich habe folgendes Problem,
    ich versuche mittels Textdateien, Mehre Parameter ( als Beispiel User namen) in eine Textdatei zu schreiben (hatte Langeweile und die mal .ini genannt.. *hat keinen genauen Grund, kann auch what ever sein.)

    Das erstellen der Textdateien (2 an der Zahl) klappt ohne Probleme.
    Beim Hinzufügen der Inhalte der Textdateien in eben die Registry meines Programmes, wird jedoch nicht der Inhalt als Value angegeben, sondern der Speicher Pfad der Textdateien.. Ich weiß da gerade nicht weiter und wäre für Hilfe, sehr Dankbar.

    Hier der Bisherige Code.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports Microsoft.Win32
    3. Public Class adusr
    4. Dim path As String = My.Application.Info.DirectoryPath & "\data\Account\Benutzer\username.ini"
    5. Dim pwpath As String = My.Application.Info.DirectoryPath & "\data\Account\Benutzer\pw.ini"
    6. Private Sub Usersave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Usersave.Click
    7. 'Hier wird die erste Textbox "Verarbeitet"'
    8. If Not File.Exists(path) Then
    9. Using sw As StreamWriter = File.CreateText(path)
    10. sw.WriteLine(TextBox1.Text)
    11. End Using
    12. End If
    13. Using sw As StreamWriter = File.AppendText(path)
    14. sw.WriteLine(TextBox1.Text)
    15. End Using
    16. Using sr As StreamReader = File.OpenText(path)
    17. Do While sr.Peek() >= 0
    18. Console.WriteLine(sr.ReadLine())
    19. Loop
    20. End Using
    21. 'Hier wird die zweite Textbox "Verarbeitet"'
    22. If Not File.Exists(pwpath) Then
    23. Using sw As StreamWriter = File.CreateText(pwpath)
    24. sw.WriteLine(TextBox2.Text)
    25. End Using
    26. End If
    27. Using sw As StreamWriter = File.AppendText(pwpath)
    28. sw.WriteLine(TextBox2.Text)
    29. End Using
    30. Using sr As StreamReader = File.OpenText(pwpath)
    31. Do While sr.Peek() >= 0
    32. Console.WriteLine(sr.ReadLine())
    33. Loop
    34. End Using
    35. 'Hier sollen beide Dateien in die Subkeys "benutzer" und "passwort" geschrieben werden, damit Sie von anderen Programmteilen genutzt werden können.
    36. Dim Rek As RegistryKey
    37. Rek = Registry.CurrentUser.OpenSubKey("Software\Andy2002 Media Systems\AndyNET\Einstellungen", True)
    38. Rek.SetValue("benutzer", path)
    39. Rek.SetValue("passwort", pwpath)
    40. Rek.Close()
    41. End Sub
    42. End Class


    Wichtig ist auch noch, das die Werte für benutzer und passwort, getrennt gelistet werden, also so das man diese per dropdownbox (bsp.) im Programm dann aussuchen kann.
    Sollte dich jetzt nicht verwundern, du schreibst path (My.Application.Info.DirectoryPath & "\data\Account\Benutzer\username.ini") und pwpath (My.Application.Info.DirectoryPath & "\data\Account\Benutzer\pw.ini") in die Registry.
    In Zeile 21. und 38. liest du zwar den Inhalt der Dateien, speicherst ihn aber nicht als Variablen, solltest du aber wenn du den mit Rek.SetValue(..., ...) in die Registry schreiben willst.

    Die Frage ist, warum schreibst du die Werte in Dateien, wenn du sie doch in die Registry schreiben willst?

    slice schrieb:



    Die Frage ist, warum schreibst du die Werte in Dateien, wenn du sie doch in die Registry schreiben willst?


    Also ich möchte das eben mehre Werte in die Registry unter einen Subkey "benutzer" gespeichert werden, und nicht immer nur 1 Wert der bei Änderungen immer Überschrieben wird.

    Als Beispiel. Der Subkey benutzer bekommt, User1, User2, User3, usw.. -> Später im Programm soll man eben diese Werte in einer Dropbox, Listview etc, Auswählen können.
    Mir ist leider nicht bekannt, wie ich mehrfachwerte einfach in einen subkey Schreiben kann.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Ich benötige halt die Dateien, um eben mehre "Benutzernamen" Anlegen zu können, Denn wenn ich es direkt z.b. von der Textbox in die Registry Schicke, ( Überhaupt kein Problem) Wird immer nur 1 Benutzername Angelegt. Der subkey "benutzer" wird also jedes mal wenn man einen Benutzer Hinzufügt, geöffnet, und eben ein neuer Wert "Username" überschreibt den alten Wert "Username". Und eben genau das will ich nicht.
    Ich hatte mir gedacht, wenn ich den Subkey "Benutzer" nun mittels Textdatei die eben mehre "Usernamen" enthält, zwingen kann, eben mehr als nur 1 Wert "Usernamen" zuzulassen.. Dann könnte man am ende, den entsprechend gespeicherten "Usernamen" auswählen, und nutzen.

    Mir ist nicht bekannt, wie ich Mehre Werte (Die am Anfang noch gar nicht existieren, sondern vom User selber erstellt werden) direkt in die gleiche Subkey Value eintragen kann,


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Andy2002 schrieb:

    Mir ist nicht bekannt, wie ich Mehre Werte (Die am Anfang noch gar nicht existieren, sondern vom User selber erstellt werden) direkt in die gleiche Subkey Value eintragen kann,
    Jo, mir auch nicht. Ich weiss aber auch nicht, wie eine Datei dabei helfen kann.
    Ich würde eher dazu neigen, mehrere SubKeys zu erstellen.

    Alternativ könnte man den RegKey "benutzer" als plural auffassen, und mehrere Benutzer komma-separiert eintragen.

    Andy2002 schrieb:

    Mir ist nicht bekannt, ...
    Öffne den Registry-Editor und erstell einen Eintrag von Hand, wie er Deiner Meinung nach aussehen soll.
    Den exportierst Du und hängst ihn als ZIP an Deinen nächsten Post.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wieso die Einstellungen in der Registry speichern? ?(
    Warum nicht einfach My.Settings?
    Ich perönlich mag es überhaupt nicht, wenn Programme die
    Reg zumüllen.
    Da das das System auf dauer auch verlangsamen kann.
    Und das Programm nach dem installieren, oft die Reg-Einträge beim
    deinstallieren vergessen!
    Visual Basic.NET 8o
    MS-SQL
    8o

    ErfinderDesRades schrieb:

    [
    Alternativ könnte man den RegKey "benutzer" als plural auffassen, und mehrere Benutzer komma-separiert eintragen.


    JA genau das wäre eine Lösung.. (Genau das will ich eben), also im "benutzer" sollen mehre Benutzernamen komma-separiert eingetragen werden können..
    Wie man das macht, wäre mir jedoch nicht bekannt. ( Da mit der Zeit neue "Benutzer" Angelegt werden können, ohne das Alte gelöscht werden sollen.

    RodFromGermany schrieb:

    Öffne den Registry-Editor und erstell einen Eintrag von Hand, wie er Deiner Meinung nach aussehen soll.Den exportierst Du und hängst ihn als ZIP an Deinen nächsten Post.
    Da brauch es keine Zip, siehe mein Bild im Obrigen Post, der Wert
    Andy2002
    Soll eben stehen bleiben, wenn ein neuer Wert
    NewUser
    Hinzugefügt wird.

    Also soll am Ende, in Regkey "benutzer" als Wert Andy2002 , NewUser , noch einer, noch jemand , noch einer , noch viele , drin stehen. -> Das soll dann in z.b. einer Listview, listbox, dropdown etc..pp Angezeigt werden

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Andy2002“ ()

    Stichworte sind da String.Join() und String.Split()
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Indem man einen String mithilfe der Daten vorbereitet und den fertigen Text, z.B. Shamash,MartinZ,Marcus Gräfe,VaporiZed in die Registry schreibt. Und später holt man den RegKey-Wert und lässt ihn am Komma auseinanderschnippeln.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Ich wüsste nicht wie mir das hilft. Die Userdaten schreibt das Programm ja untereinander in Zeilen in eine Textdatei, weil ich nicht vorausragen kann wie viele "User" im Programm genutzt werden können. Die Fertige Textdatei, soll ja dann wie in deinen bsp. in die Registrierung geschrieben werden. Hab schon keine Lust mehr.. Und überlege mir was anderes.. Das ist mir echt zu doof.
    Les dir doch nochmal den Post von @VaporiZed durch er hat dir doch dafür alles bereitgestellt. Deine Liste kannst du mit String.Join in EINEN einzigen Kommata getrennten String packen und diesen dann
    in deine Registry schreiben (egal wieviele User).
    Und beim rausholen nutzt du String.Split() und schreibst dieses wieder in deine Liste.

    Lese dir die beiden Links durch die dir gepostet wurden. Darin findest du Beispiele die dir wirklich genau das ermöglichen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Da das hier zu nichts führt, Thema erledigt.

    Da hier offenbar nicht verstanden wird, das ich eben nicht ALLE Usernamen Sofort kenne, und eben diese auch nicht durch einen Split eintragen kann.. Denn wenn ich es so mache, habe ich wieder das Problem das die alten User überschrieben werden. Also ist der weg der Falsche.
    Natürlich kennst Du nicht alle im Voraus. Aber Dein Programm kennt zu einem bestimmten Zeitpunkt alle. Sonst könnte Dein Programm sie ja auch nicht in eine Datei schreiben. Stellt sich die Frage, wie die Namen in Deinem Programm zugreifbar sind, also ob sie in einem Array aufbewahrt werden, in einer List(Of String) oder in einem Datencontainer. Dann könnte man problemlos die Daten in einen String zusammenfassen und in die Reg schreiben. Aber das bedarf Deinen Willen. Aber es klingt, als ob der inzwischen weg ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Andy2002 schrieb:

    Da brauch es keine Zip, siehe mein Bild im Obrigen Post, der Wert ...
    Soll eben stehen bleiben, wenn ein neuer Wert
    Dann poste doch den stehenbleiben sollenden und den neuen Wert in Verbindung in Deinem Post.
    Wenn ich jetzt eine Verbindung mache, ist sie Dir ggf. nicht Recht, deswegen will cih das von Dir sehen.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    @VaporiZed

    Also das Programm, hat bei der Installation 0 User, 0 Server, 0 Laufwerke. Über die Einstellungen im Programm kann der Programm Nutzer, dann entsprechende User, Server, Laufwerke Anlegen.
    Aktuell Funktioniert das mit den Servern und Laufwerken ohne Probleme, da ich für jeden Server einen neuen Subkey in die Registrierung Anlege. -> Ebenfalls für die Verlinkung der Laufwerke. VPN und Netzpaaring klappt ebenfalls.
    Ich hatte halt die bescheuerte Idee, da man Aktuell nur ein User Anlegen kann, dies mittels Textfiles auf Unendlich zu ändern. Damit die Usernamen dann gelesen werden, sollten die alle unter einen Subkey in die Registrierung geschrieben werden. Es muss jedoch so gemacht werden, das wenn Aktuell nur 2 User in der Liste stehen beide in die Reg geschrieben werden, und wenn Später neue Server/Laufwerke etc. Hinzugefügt werden, das eben auch neue User Hinzugefügt werden. -> In die Registry geschrieben werden, ohne die bereits vorhanden zu Überschreiben.

    Warum nun alles in die Reg? Da ich das vor Jahren so Angelegt habe. Jedoch war mir damals nicht bekannt, das es einen Wunsch gäbe mehre User Anzulegen. Die Automatisch zur Auswahl stehen sollen. -> Aktuell kann man das nur Händisch in die Loginmaske eingeben, ( Funktioniert jedoch nur wenn die Server Guest Verbindungen zulassen)

    Die Umsetzung ist mir dabei völlig egal, wenn jemand eine bessere Idee hat, kann man sich darüber gerne Unterhalten. Wichtig wäre es jedoch das das ganze Offline also ohne Aktive Internet Verbindung Funktioniert. Sonst könnte ich auch alles in meinen Datenbanken vom Webserver Schreiben. Aber das will ich nicht. (Lieber Dezentral).

    Die Idee vom @ErfinderDesRades mehre subkey´s als benutzer (user) Anzulegen wäre eine Möglichkeit. Aber da hätte man eben auch eine Beschränktung, z.b. 10 User.. subkey1 subkey2 usw..
    ( Gäbe es hier die Möglichkeit

    VB.NET-Quellcode

    1. Registry.CurrentUser.OpenSubKey("Software\Andy2002 Media Systems\AndyNET\Einstellungen", True) Rek.SetValue("benutzer", "benutzer1" )usw
    Zu erstellen, also das das Programm Automatisch einen neuen Subkey benutzer1 Anlegt, wenn Subkey benutzer vorhanden ist??

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Andy2002“ ()

    Wie auch immer die Benutzernamen im Programm aufbewahrt werden, man kann sie herholen, mit Split.Join zu einem String verbinden und diesen String in die Reg schreiben. Und bei Bedarf den String aus der Reg holen, mit String.Split aufteilen, dann ggf. noch ein paar Benutzernamen hinzufügen und wieder nach dem Join in die Reg schreiben.
    Beispiel

    VB.NET-Quellcode

    1. Dim Users As New List(Of String)
    2. '…
    3. Users.Add("Andy2002")
    4. '…
    5. Users.Add(TxtUserName.Text)
    6. '…
    7. Users.AddRange(IO.File.ReadAllLines("UserNames.txt"))
    8. '…
    9. Dim RegEntry = String.Join(",", Users.ToArray)
    10. Registry.SetValue(RegEntry) 'so prinzipiell

    und später

    VB.NET-Quellcode

    1. Dim RegEntry = Registry.GetValue(RegEntryKey)
    2. Users.AddRange(RegEntry.Split(","c))
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.