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.

    @Andy2002 Unbeantwortete Fragen sind im Minimum unhöflich. ;)
    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
    Dein Beispiel ist toll. Jedoch Funktioniert es so bei mir nicht.. Hab da wohl irgendwo was Falsch gemacht.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict Off
    2. Imports System.IO
    3. Imports Microsoft.Win32
    4. Public Class adusr
    5. Dim path As String = My.Application.Info.DirectoryPath & "\data\Account\Benutzer\username.ini"
    6. Dim pwpath As String = My.Application.Info.DirectoryPath & "\data\Account\Benutzer\pw.ini"
    7. Dim Rek As RegistryKey
    8. Dim Usr As New List(Of String)
    9. Dim pws As New List(Of String)
    10. Dim c As Object = Nothing
    11. Private Sub Usersave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles usersave.Click
    12. 'Hier wird die erste Textbox "Verarbeitet"'
    13. If Not File.Exists(path) Then
    14. Using sw As StreamWriter = File.CreateText(path)
    15. sw.WriteLine(TextBox1.Text)
    16. End Using
    17. End If
    18. Using sw As StreamWriter = File.AppendText(path)
    19. sw.WriteLine(TextBox1.Text)
    20. End Using
    21. Using sr As StreamReader = File.OpenText(path)
    22. Do While sr.Peek() >= 0
    23. Console.WriteLine(sr.ReadLine())
    24. Loop
    25. End Using
    26. 'Hier wird die zweite Textbox "Verarbeitet"'
    27. If Not File.Exists(pwpath) Then
    28. Using sw As StreamWriter = File.CreateText(pwpath)
    29. sw.WriteLine(TextBox2.Text)
    30. End Using
    31. End If
    32. Using sw As StreamWriter = File.AppendText(pwpath)
    33. sw.WriteLine(TextBox2.Text)
    34. End Using
    35. Using sr As StreamReader = File.OpenText(pwpath)
    36. Do While sr.Peek() >= 0
    37. Console.WriteLine(sr.ReadLine())
    38. Loop
    39. End Using
    40. 'Hier sollen beide Dateien in die Subkeys "benutzer" und "passwort" geschrieben werden, damit Sie von anderen Programmteilen genutzt werden können.
    41. Usr.AddRange(File.ReadAllLines(path))
    42. pws.AddRange(File.ReadLines(pwpath))
    43. Dim benutzer = String.Join(",", Usr.ToArray)
    44. Rek.SetValue("benutzer") 'SetValue geht nicht'
    45. Dim passwort = String.Join(",", pws.ToArray)
    46. Rek.SetValue("passwort") 'Hier auch nicht'
    47. Rek.Close()
    48. End Sub
    49. Private Sub Adusr_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    50. Rek = Registry.CurrentUser.OpenSubKey("Software\Andy2002 Media Systems\AndyNET\Einstellungen", True)
    51. Dim benutzer = Rek.GetValue("benutzer")
    52. Usr.AddRange(benutzer.Split(",", c))
    53. Dim passwort = Rek.GetValue("passwort")
    54. pws.AddRange(passwort.Split(",", c))
    55. End Sub
    56. End Class



    Es kommen folgende Error

    BC30516 Fehler bei der Überladungsauflösung, da keine zugreifbare "SetValue" diese Anzahl von Argumenten akzeptiert.
    BC30451 "c" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich. ( Hab ich behoben .. Hab einfach c is nothing raus gemacht.. ... wofür soll das überhaupt stehen also das "c"? :D

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

    Fehlerzeilen?

    ah - jetzt gesehen.
    zu SetValue probierma:

    VB.NET-Quellcode

    1. Rek.SetValue("benutzer", benutzer)
    ich glaub jedenfalls, dass der erste Parameter von SetValue den SubKey angibt, und dann muss natürlich noch angegeben werden, was mit SetValue gesetzt werden soll.
    Und das mit dem c - da guck einfach nochmal, wie Vaporized das verwendet - das ist ja einfach falsch abgeschrieben.

    Bist du eiglich dran interessiert, Verbesserungs-Hinweise prinzipieller Art zu erhalten, und Tipps, wie man Fehler selbst debuggen kann?

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

    @ErfinderDesRades
    Ja ich bin immer Interessiert, Verbesserungs-Hinweise zu erhalten. Jedoch habe ich das Gefühl, wenn ich diese nicht sofort umsetze, das hier einige direkt Beleidigt sind.

    Ja Abschreiben war ja nicht wirklich so.. War Abschreiben mit direkten Anpassungen ;-D

    Edit: Oh man
    Usr.AddRange(benutzer.Split(","c)) so muss das Heißen..
    Grummel.. pfff.. Brauch Kaffee

    Edit:
    Ja so klappt es.

    Edit:

    Jetzt hab ich folgendes Problemchen..

    Der Benutzer1 wird beim Erstellen von Benutzer2 noch mal Eingetragen, also hab ich dann Benutzer1, Benutzer1, Benutzer2
    Und beim Passwort steht immer ,Passwort1, und auch hier wird Passwort1 noch mal Eingetragen also auch Passwort1, Passwort1, Passwort2,

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

    Bevor Du Usr.AddRange aufrufst, mach Usr.Clear. Dann werden nur die UserNames aus der Reg hergenommen.
    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:

    Jedoch habe ich das Gefühl, wenn ich diese nicht sofort umsetze, das hier einige direkt Beleidigt sind.
    Jo - inhaltlich ist das ziemlich richtig.
    Aber die Erfahrung zeigt eben, dass Verbesserungen, die nicht sofort umgesetzt werden, üblicherweise nie umgesetzt werden.
    Und da hat man als Verbesserer das Gefühl, man hätte seine Weisheit besser in die Kloschüssel gesprochen.

    Und manche Verbesserungen sind eben auch ganz unerlässlich - dies zum Beispiel: Visual Studio - Empfohlene Einstellungen
    Das ist einfach eine Vorraussetzung, dass du überhaupt verschiedene Datentypen voneinander unterscheiden lernen kannst.
    Also ohne das wirst du nie auch nur annähernd verstehen, was du programmierst, und von einem gewissen Standpunkt aus ists dann eiglich auch nicht die Mühe wert, sich mit dir auseinanderzusetzen.
    Ja, so ist das: Hart und garnet fair.
    @VaporiZed
    Hab es anders gemacht, klappt gut, Ich Leere nun nach dem übertragen, in die Registry die Textdatei. Jetzt läuft es so wie ich es wollte.. Vielen vielen Dank dafür. ich hatte ja schon aufgegeben und wollte das mit 10 subkey´s machen ;) Deine Ergänzung ist gut im anderen Programmteil, da wo eben der Nutzer sein Account auswählen kann. (Wurde immer doppelt geladen..)

    @ErfinderDesRades
    Ich habe nur wenig Zeit meistens.. Ich mach das als Hobby, und wenn ich dann nur etwas vorgeworfen bekomme, ohne eine nette Erklärung, wie die von @VaporiZed wird es schon schwierig für mich. Da ich mich damit als Hobby befasse, Lese ich nicht erst Millionen von Seiten um auf meinen Fehler hinzukommen ( Ok, so schlimm war es noch nie) Aber für eine Funktion die ich einbauen wollte, so wie ich es mir vorstelle, will ich auch keine 10 Tage brauchen. Da hab ich dann sehr sehr schnell keine Lust mehr. Und widme mich wieder anderen Themen.
    PS: Deine Empfohlenen Einstellungen, worauf willst du hinaus? weil ich Option Strict Off oben stehen habe?? ;)
    Also Zeit
    Zeit sparen kannste vergessen. Programmieren kann man nur, wenn man es lernt, und lernen braucht soviel Zeit wie es braucht.
    Wenn du versuchst, Zeit zu sparen, indem du etwas zu lernen auszulassen versuchst - das kostet Zeit ohne Ende!
    Und am Ende wirst du es doch gelernt haben, denn anders kriegste dein Projekt womöglich garnicht zuende (oder aber in einen Zustand, der zum weinen ist).

    iwas hinwerfen
    Man kennt ja deine Programmier-Kenntnisse nicht, daher weiss man zunächst mal nicht, wieviel man erklären muss, und ob nicht ein "hingeworfenes" Stichwort reicht.
    Das ist dann deine Verantwortung, nachzufragen, wenn das nicht reicht.
    Eigenarbeit wird aber auch erwartet - also ein motivierter Programmierer kann oft zu einem Stichwort alles weitere hinzu-recherchieren. (Dazu muss man aber die Recherche-Möglichkeiten auch kennen, womit wir wieder beim Lernen wären...)

    Andy2002 schrieb:

    PS: Deine Empfohlenen Einstellungen, worauf willst du hinaus? weil ich Option Strict Off oben stehen habe??
    Das ist da überaus über-ausführlich erklärt, und genau darauf will ich hinaus, was da erklärt ist.
    Deswegen hab ich dir den Link "hingeworfen", ums mir zu ersparen, noch einmal zu erklären, worums geht. Weil das ist da sehr ausführlich erklärt.
    Das du Strict Off sogar irgendwo drüber stehen hast, habich garnet gesehen - ich habe aufgrund einiger glaub nicht zusammenpassender Datentypen in post#1 vermutet, dass du die Visual Studio - Empfohlene Einstellungen nötig hast.
    Ja ok stimmt, man Lernt mit der Zeit.. ;) Ach mein Projekt, welches ich seit 2012 Schreibe, Funktioniert.. Es kommen halt immer neue Sachen Hinzu, altes (auch unötiges, (weil gelernt ;-P ) wird immer wieder Aktualisiert. Mein ganzen (Problem) bestand darauf, das ich dachte man kann einen Registry Key nur einen Wert zuweisen. Das mehre gehen hab ich durch euch gelernt. (Ja ich hab was dazu gelernt)
    Die Sache mit Split ist noch Interessant für mich, vorallem weiß ich bis jetzt immer noch nicht wofür das c steht. Also z.b.

    VB.NET-Quellcode

    1. Usr.AddRange(benutzer.Split(","c))
    Das "," versteh ich das ist der Trenner, nach dem ein Zeilenumbruch Stattfindet. Aber wofür steht das c?

    Was jetzt noch toll wäre wie erkläre ich der Combobox, dass der Inhalt "benutzer1" ausgewählt werden soll, und nicht erst ein Leeres Feld. "benutzer1" ist immer erst im Dropdown zu sehen. Da wo auch "benutzer2" "benutzer3" stehen.. :-| Grübel.

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

    Andy2002 schrieb:

    VB.NET-Quellcode

    1. Usr.AddRange(benutzer.Split(","c))

    Andy2002 schrieb:

    VB.NET-Quellcode

    1. ​Usr.AddRange(benutzer.Split(",",c))
    Lesen bildet.
    Wo ist der Unterschied :?:
    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!

    Andy2002 schrieb:

    ich dachte man kann einen Registry Key nur einen Wert zuweisen. Das mehre gehen hab ich durch euch gelernt.
    Das mit dem einen Wert pro RegKey ist nachwievor richtig!
    Der hier angewendete Trick besteht darin, dass alle User in einen String gestopft werden, und den einen kann man dann unter einem RegKey bunkern.



    Andy2002 schrieb:

    VB.NET-Quellcode

    1. ​Usr.AddRange(benutzer.Split(",",c))
    Na, da ist doch schonwieder der Abschreibfehler - das sollteste dir abgewöhnen.
    Abschreibfehler sind auch enorm zeitraubend.
    weil die Frage "was bedeutet das c?" kann nur richtig beantwortet werden mit "nix - das c ist da falsch."

    Ich weiss, was du fragen willst, aber ich lehne es ab, Fragen zu beantworten, die nicht gestellt wurden.
    Weil Fragen korrekt stellen gehört auch zum Lernen, und wirklich korrekt, vollständig, eindeutig gestellte Fragen lösen sich wunderbarerweise zu 50%-80% in Luft auf.
    Dem Fragesteller hier durch "ErAhnen" die SelberDenk-Arbeit abzunehmen trainiert ihm die Dummheit ja gradezu an.

    Aber ich mach Ausnahme. Du willst fragen:
    "Was bedeutet das c bei ","c?"
    Antwort: Das c zeigt an, dass es sich bei dem Literal nicht um einen String handelt, sondern um ein einzelnes Char - das ist ein Unterschied.
    Also so isses ein String: ",", und so isses ein Char: ","c.